1. Git是分布式版本控制系统,相对的,CVS、SVN都是集中式的版本控制系统;
2. Git安装(Linux)
1) 使用
$ git
查看当前系统是否安装了git;
2) 如果当前系统还没有安装git,在Debian或Unbuntu下,可以使用命令
$ sudo apt-get install git
完成git的安装;
3) 如果是其他Linux版本,先从Git官网下载源码,解压然后依次输入:
$ ./config $ make $ sudo make install
4) 安装完成后,进行设置,在命令行输入:
$ git config --global user.name “Your name” $ git config --global user.email email@example.com
注:使用git config命令的–global参数之后,表示当前机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的username和Email地址;
3. 创建版本库
1) 选择一个合适的地方,创建一个空目录;
$ mkdir directory-name $ cd directory-name $ pwd
pwd命令用于查看当前目录;
2) 使用
$ git init
命令把该目录变成Git可以管理的仓库:
4. 使用
$ git status
命令查看当前仓库的状态;
5. 使用$ diff file-name查看当前版本文件和远程仓库版本的区别;
使用
$ git diff HEAD -- file-name
查看工作区和版本库里最新版本的区别;
6. 版本回退
1) 使用
$ git log
查看历史记录;
2) 使用
$ git log --pretty=oneline
查看简单历史记录;
3) 使用
$ git reset --hard HEAD^
回退到最近的上一个版本;
4) 使用
$ cat file-name
查看文件内容;
5) 假定有历史版本,其版本号的前几位为123456,使用
$ git reset --hard 123456
退回到该版本号标识的版本;
6) 使用
$ git reflog
命令查看命令历史列表;
7. 关于Git的版本回退
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当执行版本回退操作时,Git仅仅是把该指针的指向改变而已;
8. 工作区和暂存区
工作区(Working Directory): 当前操作的文件所在的目录就是一个工作区;
版本库(Repository): 工作区有一个隐藏目录”git”,该目录不是工作区,而是Git的版本库,该目录下保存了成为stage(或者成为index)的暂存区,还有Git为该仓库工作而自动创建的第一个分支master,以及指向master的指针HEAD;
9. Git添加文件的步骤
1) 使用
$ git add file-name
把文件修改添加到暂存区;
2) 使用
$ git commit –m ‘comment’
把暂存区的所有内容提交到当前分支;
注: 对于每次修改,如果不把该次修改添加到暂存区,就不会被加入到commit里面;
10. Git跟踪管理的对象是修改,而不是文件;
11. 撤消修改
1) 当错误修改了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令
$ git checkout -- file-name
完成操作;
2) 不仅错误修改了工作区某个文件的内容,而且还将该修改添加到了暂存区,要丢弃该次修改,第一步使用
$ git reset HEAD file-name
回到步骤1),然后按步骤1)进行操作;
3) 如果已经把不合适的修改提交到了版本库时,要撤消本次提交,参考6. 版本退回,不过前提是尚未推送到远程库;
12. 删除文件
1) 直接在文件管理器中删除无用文件,使用命令
$ rm file-name
进行操作;
2) 如果要确实从版本库中删除该文件,使用命令
$ git rm file-name
进行操作;
3) 如果删除错了,可以使用版本库的最新版本进行恢复,使用命令
$ git checkout -- file-name
进行操作;
13. 远程仓库
1) 创建SSH Key,在用户主目录下,如果有.ssh目录,但该目录下没有私钥文件id_rsa和公钥文件id_rsa.pub两个文件,使用shell创建SSH Key:
$ ssh-keygen -t rsa -C "email@example.com"
14. 克隆远程仓库
使用命令
$ git clone git@github.com:jiabailie/Collections.git
进行操作;
注: Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快;
15. 分支管理
1) 创建并切换分支
使用
$ git checkout -b dev
创建dev分支,并把当前分支切换到dev分支;
上面的一条命令相当于
1 $ git branch dev 2 $ git checkout dev
两条命令的效果;
2) 查看当前分支,使用
$ git branch
进行操作;
3) 当前dev分支工作并且提交后,切换回master分支,使用
$ git checkout master
进行分支切换;
4) 合并dev分支到master分支,使用命令
$ git merge dev
进行操作,前提是已经切换回master分支;
5) 分支合并后,删除dev分支,使用命令
$ git branch -d dev
进行操作;
16. 冲突解决
查看分支合并情况,使用命令
$ git log --graph --pretty=oneline --abbrev-commit
进行操作;
17. 分支管理策略
Git默认使用Fast forward模式,在该模式下,删除分支后,会丢弃该分支的信息;
使用–no-ff参数禁用Fast forward方式的merge,禁用后,git会在merge时生成一个新的commit,由此从该分支历史上可以看出分支信息,
使用命令
$ git merge --no-ff -m 'merge with no-ff' dev
完成操作;
18. Bug分支
1) 使用stash功能可以把当前的工作现场保存起来,等以后恢复现场后继续工作,使用
$ git stash
命令完成操作;
2) 使用
$ stash list
命令查看保存的工作现场列表;
3) 有两种办法用来恢复现场:
第一种是使用
$ git stash apply
恢复现场,恢复后stash的内容不会删掉,需要使用
$ git stash drop
命令进行删除操作,使用时先使用
$ git stash list
查看stash列表,然后恢复指定的stash,例如
$ git stash apply stash@{0}
第二种是使用
$ git stash pop
恢复现场,恢复现场的同时也会把stash的内容删除;
19. 强行删除指定分支,使用命令
$ git branch -D branch-name
进行操作;
20. 多人协作
1) 查看远程库信息,使用命令
$ git remote
进行操作;
如果要查看详细,使用命令
$ git remote -v
进行操作;
2) 创建远程origin下dev分支的本地dev分支,使用命令
$ git checkout -b dev origin/dev
进行操作;
3) 设置本地dev分支和远程origin/dev分支的链接,用于git pull操作,使用命令
$ git branch --set-upstream dev origin/dev
进行操作。