保持本地变化
我怎样才能安全地更新(拉)一个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的答案是真正你想要的。
假如说:
- 你在分支
master
- 上游分支是
master
- 您没有任何未提交的更改
….你可以这样做:
# 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