git pull保持局部变化


git pull keeping local changes

我如何安全地更新(拉)一个Git项目,保持特定的文件不变,即使有上游的变化?

myrepo/config/config.php文件

有没有一种方法,即使这个文件在远程被更改,当我git pull时,其他的一切都被更新,但这个文件是不变的(甚至没有合并)?

我需要按我的要求做,因为我只写基于Git的部署脚本。我无法将配置文件更改为模板。

所以,我需要一种方法来编写更新脚本,它不会丢失本地更改的内容。我希望能做些简单的事情:

1
2
git assume-remote-unchanged file1
git assume-remote-unchanged file2

然后是git pull


有一个基于git-stash的简单解决方案。把你改变的东西都藏起来,把新东西都拿出来,把你的东西放进去。

1
2
3
git stash
git pull
git stash pop

在暗藏弹上可能会有冲突。在这种情况下,您描述的事实上,config.php会有冲突。但是,解决冲突很容易,因为你知道你把什么藏起来就是你想要的。这样做:

1
git checkout --theirs -- config.php


如果您的报告中有一个文件,它应该是由大多数拉器定制的,那么将该文件重命名为类似于config.php.template的文件,并将config.php添加到您的.gitignore中。


更新:这字面上回答了所问的问题,但我认为Kurzedmetal的答案确实是你想要的。

假设:

  • 你在master分店
  • 上游分支机构为origin中的master
  • 您没有未提交的更改
  • …你可以这样做:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # Do a pull as usual, but don't commit the result:
    git pull --no-commit

    # Overwrite config/config.php with the version that was there before the merge
    # and also stage that version:
    git checkout HEAD config/config.php

    # Create the commit:
    git commit -F .git/MERGE_MSG

    如果需要经常这样做,可以为此创建别名。请注意,如果您对config/config.php进行了未提交的更改,这会将它们丢弃。


    我们也可以试着用钢筋拉

    1
    git pull --rebase origin dev