其他小技巧
1.忽略临时性的本地修改
(1)忽略一些已经版本化的文件
这时候,被Git管理的文件会被暂时性忽略,所以我们对这些文件的修改就会被忽略
# git update-index --assume-unchanged <文件名>
(2)回到工作目录
现在回到工作目录,status和add命令都不会先是被添加的文件中所发生的修改了
(3)停止忽略
我们可以用--no-assume-unchanged选项来取消--assume-unchanged选项对各单一文件的影响。或者可以用--really-refresh命令来重置一下所有文件的状态
2.查看对文本文件的修改
一般来说,Git中的diff算法会逐行比较两个文件。但是如果我们将某些单词从一行移动到另一行,就很难看出一个文件究竟做了哪些修改。
对于连续性文本,--word-diff
选项会有用,它可以按单词显示我们所做的修改。
# git diff --word-diff
此外,我们还可以设置--word-diff=color
,以便用不同的颜色来显示文中的不同。
3.Git创建别名
# git config --global alias.ci commit
# git config --global alias.st status
4.防止某些本地提交不会被传送给中央版本库
用git pull加上--ff-only
# git pull --ff-only
--ff-only参数是通过在pull命令中允许快进式合并来防止合并出现提交。换句话来说,就是本地如果存在了一些修改没有提交,该合并操作就会被取消。
5.push指定分支
如果工作中使用特性分支,本地版本库会存在多个分支,在没有参数的情况下,push命令只会将当前活动分支中的内容传送到远程仓库。但是我们也可以设置push.defult选项来改变这一行为。
# git config push.defult upstream
该选项默认匹配所有与远程版本库中有相同分值的本地分支。因此,我们每次在执行push命令时都必须明确指明分支,以限定传送的内容。
6.本地分支和远程相关联
当我们在本地创建了一个分支,比如branchtest,我们希望与远程某个分支相关联,假设远程那个分支也叫做branchtest,当我们直接pull代码,会出现错误。
语法:
# git branch --set-upstream <本地分支名> <远程分支名>
新版本git用的参数是--set-upstream-to,并且后面两个参数要调换一下
# git branch --set-upstream-to <远程分支名> <本地分支名>
7.合并时放止快速合并
# git merge feature --no-ff --no-commit
--no-ff参数就是防止快速合并。--no-commit参数用于指示Git不要因为接下来可能失败的测试而停止任何提交。
8.ReReRe——解决冲突的自动化方案
我们在文件中手动解决冲突的过程中可以被当预案记录下来,如果同样的冲突一再发生,改元就可以自动被应用。这就是所谓的“重预案记录”。这就是使用ReReRe。
(1)启用ReReRe
这个用于记录冲突预案的特性必须针对各个版本库单独开启
# git config rerere.enabled 1
由于ReReRe是将冲突预案存储在本地,所以该工具在该版本库的每个克隆体重也必须要被单独开启。
(2)记录冲突预案
一旦ReReRe被启用,我们所有解决冲突的方案都会在执行commit命令时被自动保存下来。但如果没有被执行(例如,试图执行reset命令时可能被拒绝了),这时候我们就显示调用rerere命令了:
# git rerere
Recorded resolution for 'foo.txt'
(3)应用冲突预案
一旦ReReRe被启用,Git就会去试图自动的反复解决没一个合并中的冲突。例如,在下面的情况中,尽管该文件在解决冲突的过程中被修改过了,但我们还没有add命令确认该冲突得到了解决。
# git merge featureE
Auto-merging foo.txt
CONFLICT (content):Merge conflict in foo.txt
Resolved 'foo.txt' using previous resolution.
Automatic merge failed;fix conflicts and then commit the result.
在我们解决了相关冲突之后,就必须要通过add命令将受影响的文件添加到下一次提交中
# git add foo.txt
9.显示某个被合并特性中的所有修改
(1)定位某特定分支中的提交
# git log --first-parent --oneline --grep='featureC'
这里,--grep选项会负责在日志中搜索某段给定的文本