MajestySolor
V2EX  ›  问与答

git 如何完全忽略一个已经有追踪关系的文件是否有改动? .gitignore / exclude / --assume-unchanged 都有局限性~

  •  
  •   MajestySolor · Jan 25, 2017 · 3316 views
    This topic created in 3572 days ago, the information mentioned may be changed or developed.
    比如, a 文件已经提交过了,也就是已经追踪了,但是出于某种原因我希望这个 a 文件的后续改动被忽略掉
    .gitignore 和 exclude 都是需要没有追踪的情况下才可行,但是我并不希望删掉远程库上的 a 文件
    git update-index --assume-unchanged a 文件可行,但是当切换分支的时候仍然会因为 a 文件有过改动而无法切换
    研究了好久没合适的解决方法,求指导~~
    7 replies  •  2017-01-25 22:49:37 +08:00
    wujysh
    wujysh
    Jan 25, 2017
    1
    git rm --cached a
    MajestySolor
    MajestySolor
    OP
    Jan 25, 2017
    2
    @wujysh 这样会删除远程库的 a 文件,还是不可行的
    kiwi95
    kiwi95
    Jan 25, 2017 via Android
    3
    如果只是一个文件,可以做一个 a.template 的文件作为 git 追踪的文件,大家公用这个文件,新 clone 的仓库手动复制一个命名为 a 就可以了

    用 assumr-unchanged 有点麻烦,要是忘记了这个标记位更麻烦
    kiwi95
    kiwi95
    Jan 25, 2017 via Android
    4
    append:
    把 a 加到 .gitignor 里面
    bigpigeon
    bigpigeon
    Jan 25, 2017
    5
    以前也遇到这个问题,后来改变思路了,配置文件改名为 xx.conf.bak ,然后 git pull 下来后 cp xx.conf.bak xx.conf
    .gitignore 中加入 xx.conf
    klesh
    klesh
    Jan 25, 2017 via Android
    6
    SoloCompany
    SoloCompany
    Jan 25, 2017
    7
    用 named stash

    git stash save ‘ my checkpoint'
    git checkout stash -b my-checkpoint
    git checkout master
    git stash pop

    以后任何时候你希望得到一个 clean working copy 的时候,直接很黄很暴力的(慎重!)
    git reset --hard

    随时恢复工作环境
    git stash apply my-checkpoint

    把 stash 保存为单独一个分支是为了避免误操作把 stash 给覆盖或清除了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2191 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 13:22 · PVG 21:22 · LAX 05:22 · JFK 08:22
    ♥ Do have faith in what you're doing.