保持本地变化

我怎样才能安全地更新(拉)一个git项目,保持特定的文件不变,即使有上游的变化?

myrepo /configuration/ config.php中

有没有办法,即使这个文件正在远程更改,当我git拉,一切都更新,但这个文件是不变的(甚至没有合并)?

PS。 我需要做我所要求的,因为我只写基于git的部署脚本。 我无法将configuration文件更改为模板。

所以,我需要编写更新脚本的方式,不会丢失本地更改的内容。 我希望有如下简单的事情:

git assume-remote-unchanged file1 git assume-remote-unchanged file2 

然后git pull

有一个基于Git存储的简单解决scheme。 把所有变化的东西藏起来,把所有的新东西都拿出来,把你的东西藏起来。

 git stash git pull git stash pop 

在存储stream行可能会有冲突。 在你描述的情况下, config.php实际上会有冲突。 但是,解决这个冲突是很容易的,因为你知道你所藏的东西是你想要的东西。 所以这样做:

 git checkout --theirs -- config.php 

如果你的repo中有一个文件,它应该被大多数的用户自定义,那么把这个文件重命名为config.php.template然后把config.php文件添加到你的.gitignore

更新:这从字面上回答问题,但我认为KurzedMetal的答案是真正你想要的。

假如说:

  1. 你在分支master
  2. 上游分支是master
  3. 您没有任何未提交的更改

….你可以这样做:

 # 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 

如果您需要经常这样做,您可以为其创build一个别名。 请注意,如果您对config/config.php有未提交的更改,则会将其丢弃。

我们也可以用rebase来尝试git pull

 git pull --rebase origin dev