美文网首页GitGit
git 技巧(老司机也需要)

git 技巧(老司机也需要)

作者: inke | 来源:发表于2017-07-04 14:52 被阅读305次

    git 技巧(老司机也需要)

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

    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 <inke88@163.com>" --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 技巧(老司机也需要)

        本文链接:https://www.haomeiwen.com/subject/avqxhxtx.html