git 技巧(老司机也需要)
git 看过3本书,感觉自己已经用的很溜了,但是发现有些特殊场景下的问题,可能当时自己看书没有理解或者撸多了,导致还是有些问题困扰,此贴一直更新,记录实际开发中遇到的问题。
[toc]
git 忽略本地特殊文件变化
原因:因为 inke
用的 mac os
,同事用的 windows os
,所以项目中的某些配置文件的路径不同,所以每次提交代码的时候都要 checkout
或者 reset
某个配置文件,防止提交代码影响大部分同事配置文件的 windows
路径,每次复制粘贴回来很烦,又不能直接修改.gitignore 文件,因为大家用的都是同一套的.gitignore 文件。
-
忽略本地 a.txt 文件的追踪(即使这个文件已经提交到远程了)。
git update-index --assume-unchanged a.txt
如果这个配置文件的远程代码已经更新了,那么我们本地的忽略文件在
pull
代码的时候也会同步更新,此时还需要改变一下适合我们本地配置的代码,但是你的改变不会提交到远程。
-
恢复本地的 a.txt 文件的追踪(使用了上面的代码忽略过了,但是想恢复成不忽略)
git update-index --no-assume-unchanged a.txt
技巧:
可以使用 -p
的参数,选择性的 add 某些代码,不用 add 整个目录
git add -p a.txt
注意:
.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
另一种方式忽略,只能是未追踪过的文件:
修改本地exclude
文件,规则和.gitignore
是一样的。
vim .git/info/exclude
git .gitignore 文件不生效问题
有时候在项目开发过程中,突然心血来潮想把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore
只能忽略那些原来没有被track
的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore
是无效的。
-
解决方法:把本地缓存删除(改变成未track状态),然后再提交:
git rm -r --cached . git add . git commit -m 'update .gitignore'
当然没有必要git rm -r --cached .
把所有的文件都变未track状态,可以针对某些不想要的文件.
例如:git rm -r --cached a.txt
注意:
不要误解了 .gitignore
文件的用途,该文件只能作用于 Untracked Files
,也就是那些从来没有被 Git
记录过的文件(自添加以后,从未 add
及 commit
过的文件)。
如果文件曾经被 Git
记录过,那么.gitignore
就对它们完全无效。
git 修改已经提交的作者和邮箱
git commit --amend --author="inke <inke88@163.com>" --no-edit
git 本地 commit
改为 未 commit
,重新修改或提交
由于公司大哥把自己修改的配置代码 commit
在本地但是没有 push
到远程,怕影响大家配置,又不想修改后再提交一次,所以需要使用 reset
。
-
git reset –mixed
:默认方式,相当于git reset
,它回退到某个版本,只保留源码,回退commit
和index
信息。相当于时光回溯到add
和commit
之前 -
git reset –soft
:回退到某个版本,只回退了commit
的信息,index
和 代码 都不变。相当于修改了提交日志。 -
git reset –hard
:彻底回退到某个版本,本地的源码也会变为上一个版本的内容。完全回到了某个版本,如果想下次checkout
CommitId ,可以使用reflog
查看
git 全局忽略 MAC OS 系统文件
vim ~/.gitignore
把一下内容添加到~/.gitignore
### macOS template
*.DS_Store
.AppleDouble
.LSOverride