blyang 你长的很好看啊~
关于 Git 的理解
发表于: | 分类: Application | 评论:0 | 阅读: 2025

写一些关于Git的个人认知,在这里记录一下、


关于Git

git是一个分布式版本控制系统,同样作为版本控制系统被人熟知的还有SVN,两者的区别主要在于:

  • git是分布式的,记录的是代码变更,每个本地仓库都是一个完整的库,是系统的一部分,相互之间仅推送修改的部分
  • SVN是一个集中的代码库,在仓库中存储的是完整的代码

git相比与SVN,优势主要在:

  • 分布式仓库:每个本地仓库直接都是独立的,可以完成除了推送之外的所有工作
  • 多分支管理:git的分支创建和维护极其简单,对于协同工作的效率提升很大


.git 文件夹

当完成了git init 或者是 git clone之后,就会在本地创建一个repository,也叫仓库或者是版本库,在这个仓库中的所有文件修改都能够被追踪到。而在仓库创建完成之后,会生成一个.git文件夹,这个文件夹就是用来维护这个仓库的。它的主要作用有:

  • 用来跟踪和管理版本库,维护本地仓库
  • repository创建之后会自动生成
  • 在里面存储了当前仓库的配置信息(config)和当前仓库的改动信息


几个概念

在继续讲述之前,需要先了解几个概念,分别是工作区,暂存区和版本库,具体概念如下:

  • 工作区:创建了一个本地仓库,这个仓库所在的文件夹就叫工作区。简单可以理解成这样:平时开发时,都在这个文件夹中工作,所以这个文件夹就叫工作区
  • 暂存区:git add 之后,这次改动中添加的文件就由工作区加入到了暂存区,暂存区中的文件都在等待被提交。
  • 版本库:记录下当前代码版本的地方,就叫版本库,包含上面讲到的.git文件夹。实际上版本库又包含暂存区,只不过暂存区的文件并不能被其他协同开发的同事看到,只有当暂存区的改动被commit提交到当前分支的时候,才算是加入到了核心版本库中,此时才允许其他版本库看到。


git相关命令

  1. git add :用于在仓库中增加文件,注意单个文件的添加和所有文件的添加是不同的, 注意文件添加路径

  2. git status:查看当前仓库的状态,主要是查看哪些文件被修改,文件冲突的时候能够快速定位,可以配合git diff查看具体的改动。但是不得不说,git diff巨难用

  3. git commit:将本地仓库已经添加到暂存区的文件提交到工作区,修改仓库文件

  4. git log:查看最近的改动,包括责任人、时间、版本号和具体commit的消息,配合git reflog查看当前仓库历史的所有操作记录以及版本号缩写

  5. git reset --hard XXX: 版本回退,如果回退之后要修改远程仓库的版本,记得推一下,git push -f,其中-f表示强制推送。而在回退的命令中有个--hard,针对这个标签也有具体的说法:

    --hard:表示回退核心版本库、暂存区和工作区的所有代码
    --mixed:git reset时默认是这个,表示修改核心版本库和暂存区的代码,而不会修改当前工作区的代码
    --soft:是最弱的一种回退,仅回退核心版本库的代码,不会修改暂存区和本地工作区的代码

  6. git rm XXX: 从仓库中删除指定的文件

  7. git remote add origin git@XXX.git : 用于关联本地仓库和远端仓库,不过我们工作时,大部分都是直接clone下来,所以这个命令并不常用

  8. git branch bra-name:表示新建一个名为bra-name的分支

  9. git checkout bra-name:切换工作区分支到bra-name分支上,(注意,如果这个分支是别人新建的,切换之前务必pull一下,将别人的改动拉到本地仓库中之后,才能完成切换)

  10. git branch:用于查看当前分支,建议直接使用 git branch --v,用于查看当前工作区中的所有分支

  11. git merge branch-other:表示将分支branch-other合并到当前分支上。需要注意的是,如果两个分支对同一个文件都做了改动,那么就会存在冲突的情况,要手动解决掉这些冲突之后才能提交

  12. git branch -D branch-delete:表示将branch-delete的分支从版本库中删除掉

  13. git stash:表示把当前工作区中的修改内容隐藏起来,当有些时候在工作区中修改了一部分内容,但是并不想添加到暂存区,而此时又来了新任务,本地工作区需要处理另外一个事情,此时就需要git stash隐藏本地工作区中已经做的改动。 使用git stash list可以查看所有工作区的隐藏内容, 对应的如果想把隐藏的内容取出来,则可以使用git stash pop命令,将隐藏的内容提取到当前工作区中。

  14. git rebase:从实现效果来说,和git merge是一致的,唯一的不同是它的合并更像是一个衍合的过程,是直接在生成分支的根节点上作的合并,从合并图上来看,更好看一些。


.gitignore

常见的一些配置文件,不希望加入到git仓库中的时候,可以通过配置 .gitignore的方式忽略这些文件。正常忽略文件的原则是:

  • 忽略配置文件
  • 忽略系统自动生成的文件
  • 忽略开发者自己设置的某些个性化文件

.gitignore在仓库的根目录下,具体的内容编辑就不说了,说一下需要注意的点。当一个仓库生成了之后,添加了 .gitignore之后,发现并不会生效,这是因为原来的版本库中已经存在的文件是不能直接忽略的,它依然会存在,为了解决这个问题,需要在修改了 .gitignore 文件之后,刷新一遍仓库,具体命令为:

git rm -r --cached .
git add .
git commit -m 'update .gitignore'


Tips

  • 切换分支之前,务必确保当前这个分支已经被拉到本地了,否则如果本地的仓库中没有的话,是无法完成checkout切换的
  • 多人改同一份文件之前,一定要pull一下,把上一次的改动拉下来,解决掉冲突之后,再推上去

评论已关闭

TOP