目录
1.添加文件
git add xxx
可将某一文件提交到暂存区git add xxx .
监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。git add xxx -u
仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)git add xxx -A
上面两个功能的合集- 交互模式
git add -i
可进入交互模式 在交互模式下patch
可以查看当前内容与版本库中的内容差异,从而决定是否添加到暂存区y
表示接受修改n
表示忽略修改a
或者d
分别表示添加或放弃剩余的修改?
表示所有选项的帮助信息 可使用git add -p
直接进入补丁模式
2.提交文件
2.1三种提交的方法
-
先对要提交的文件或修改调用
git add
进行提交到暂存区,然后使用git commit -m "xxx"
完成提交 -
git commit -m "xxx" -a
工作目录树中当前的所有修改提交到版本库中 -
git commit -m "xxx" xx
提交某一个指定的文件
2.2 查看当前状态
- 可使用
git status
查看目录工作书中的所有变动 该命令的输出结果是暂存区内要提交的内容、工作目录树中未纳入暂存区的改动 以及尚未纳入版本控制的新文件
2.3 查看文件改动 git diff
- 不添加任何参数的
git diff
比较的是工作目录树与暂存区之间的区别 git diff —cached
比较暂存区与版本库中的区别git diff HEAD
可以比较工作目录树(包括暂存和未暂存的修改)与版本库中的差别
3.分支
3.1创建分支
- 使用
git branch xxx
进行创建分支 当出现以下情况时,可进行创建分支 如 实验性更改、增加新的功能、BUG修复等等,可在新分支进行修改,然后将其合并到主分支
3.2切换分支
git checkout xxx
或者使用git checkout -b xxx
创建分支并切换至新的分支
3.3合并分支
- 直接合并 把一条分支的全部历史提交合并到另一条分支上 例如将
dev
合并到master
分支,使用git checkout master
切换到master分支,然后使用用git merge dev
将其合并到master
分支 - 压合合并 压合指的是git将一条分支上的所有历史提交压合成一个提交,提交到另一个分支上,当想开发一些实验性的新功能或者修复BUG时,这种合并就很有用,因为此时所需要的并不是长期记录和跟踪每个实验性的提交,只是最后的成果。同样需要将
dev
合并至master
分支,使用git checkout master
切换至master
分支,然后使用git merge --squash dev
,此时dev分支上的所有提交已经合并到工作区暂存,然后像其他正常提交一样,将这些改动提交到版本库中 - 拣选合并 分之间只需要合并一个提交时,使用
git cherry-pick 版本号
达到只合并一个提交的操作
4.冲突
- 如果在两个条分支编辑同一个文件,做不同的修改,然后合并这两条分支,将会导致冲突
- 处理冲突 对于简单的合并,使用手动编辑并解决冲突,接着保存修改后提交;若对于复杂的合并,使用可视化工具进行合并 如 FileMerge
5.版本
5.1历史记录
-
使用
git log
查看版本库中历史记录,不带参数的的此命令中,每个提交有四部分信息:提交名称、提交人、提交日期、提交留言 -
使用
git log -p
可以查看版本间的代码差异 -
查询历史记录
git log --since="5 hours"
查询最近五小时的提交,同理可使用的查询范围有 before,时间限定词有minute、“2018-10-1”日期;git log 181ea1e..0adad1a
老版本号在前,新版本号在后作为查找范围进行查找
-
版本间的差异
git diff 版本号
可查看对应版本号与当前工作目录树间的差异 -
git blame xxx
可查看对应xxx文件名的所有提交作者的姓名
5.2版本控制
5.2.1版本号
-
^
一个脱字号相当于回溯一个版本,abcd123^
相当于abcd123
之间的那个版本,可以使用多个脱字号,可以回溯多个版本 -
~N
制回溯N个版本,原理同上
5.2.2增补提交
- 当已经把代码提交了,但是提交之后需要修复该修改 通过使用
git commit -C HEAD -a -amend
该commit命令使用了一个新参数-C,告诉Git复用指定提交的提交留言,而不是从头再写一个。此操作可以
5.2.3 反转提交
- 反转已经提交的改动 ,最简单的方法就是使用
git revert XXX
命令,此命令在版本库创建一个“反向的”新提交来抵消原来的改动,通常Git会立即提交反转结果,但是也可以用过-n
参数告诉Git先不要提交,运行多个git rever -n XXXX
命令,git会暂存所有的变更,然后做一次性提交 - 例如
git rever -n HEAD
git rever -n abcd123
5.2.4 复位
-
git reset XXXX
其中XXX可是某个特定的HASH版本号也可是使用^
或者~N
进行复位 -
git reset --mixed
回退commit,保留源码,默认方式.git reset --soft
回退至某个版本,只回退commit信息,暂存工作目录树中因复位产生的与版本库的差异,以便提交,这对于在之间的提交中发现错误并需要更改时非常有用git reset --hard
彻底回退至某个版本,--hard
命令需要小心使用,该选项会从版本库和工作目录中同时删除提交,并且不可以恢复
5.2.5 rever与reset的区别
- git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
- 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
reset
的使用情景:如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法。rever
的使用场景:如果我们想恢复之前的某一版本(该版本不是merge类型),但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。
6.远程仓库
6.1克隆仓库
- 例如
git clone git://xxxxx/xxx.git
,当输入此命令时,默认克隆远程仓库remote下的所有的分支,可使用-b 分支名
对某一远程仓库的某一个分支进行克隆 例如git clone -b dev git://xxxx/xx.git
6.2 关联远程仓库
git remote add origin XXX
通过使用此命令关联远程仓库
6.3版本库同步
- 先使用
git fetch orgin master
拉取远程分支,然后使用git merge origin/master
合并远程分支与本地分支也可以git fetch origin master:tmp
从远程仓库master分支获取最新,在本地建立tmp分支,接着git diff tmp
将当前分支和tmp进行对比git merge tmp
合并tmp分支到当前分支 git pull <远程主机名> <远程分支名>:<本地分支名>
可以将远程仓库直接拉取并合并,如果远程分支(next
)要与当前分支合并,则冒号后面的部分可以省略。上面命令可以简写为:git pull origin next
6.4 推送远程仓库
-
第一次推送使用
$ git push -u origin master
命令,将本地master与远程master进行关联 -
git push origin master(分支名)
进行远程推送 -
git push -f origin master
强制推送至远程代码库,慎用此命令,会强制覆盖远程仓库