git 技巧(老司机也需要)

git 技巧(老司机也需要)

git 看过3本书,感觉自己已经用的很溜了,但是发现有些特殊场景下的问题,可能当时自己看书没有理解或者撸多了,导致还是有些问题困扰,此贴一直更新,记录实际开发中遇到的问题。

git 技巧(老司机也需要)_第1张图片
image.png

[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 记录过的文件(自添加以后,从未 addcommit 过的文件)。
如果文件曾经被 Git 记录过,那么.gitignore 就对它们完全无效。



git 修改已经提交的作者和邮箱

git commit --amend --author="inke " --no-edit



git 本地 commit 改为 未 commit,重新修改或提交

由于公司大哥把自己修改的配置代码 commit 在本地但是没有 push 到远程,怕影响大家配置,又不想修改后再提交一次,所以需要使用 reset

  • git reset –mixed默认方式,相当于git reset,它回退到某个版本,只保留源码,回退commitindex信息。相当于时光回溯到 addcommit 之前
  • git reset –soft:回退到某个版本,只回退了commit的信息,index和 代码 都不变。相当于修改了提交日志
  • git reset –hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容。完全回到了某个版本,如果想下次checkout CommitId ,可以使用 reflog 查看



git 全局忽略 MAC OS 系统文件

vim ~/.gitignore

把一下内容添加到~/.gitignore

### macOS template
*.DS_Store
.AppleDouble
.LSOverride



你可能感兴趣的:(git 技巧(老司机也需要))