git pull保持局部变化

Joh*_*son 124 git

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

myrepo /配置/ config.php中

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

PS.我需要做我要问的事,因为我只是在编写基于git的部署脚本.我无法将配置文件更改为模板.

所以,我需要编写不会丢失本地更改的更新脚本.我希望有一些简单的事情:

git assume-remote-unchanged file1
git assume-remote-unchanged file2
Run Code Online (Sandbox Code Playgroud)

然后 git pull

GoZ*_*ner 232

有一个基于Git存储的简单解决方案.存放你已经改变的所有东西,拉出所有新东西,应用你的藏匿处.

git stash
git pull
git stash pop
Run Code Online (Sandbox Code Playgroud)

在藏匿的流行音乐上可能存在冲突.在您描述的情况下,实际上会发生冲突config.php.但是,解决冲突很容易,因为你知道你在藏匿处放置的是你想要的东西.这样做:

git checkout --theirs -- config.php
Run Code Online (Sandbox Code Playgroud)

  • 使用git的事情是你必须了解它将要做什么.使用git的另一件事是,即使对于聪明的人来说,通常也很难理解git将要做什么. (8认同)
  • 那个git checkout --theirs命令很混乱.它做了我想要的一次,而另一次真的很糟糕.有关于它的任何好文档? (5认同)
  • 是的,有时候"他们的"和"我们的"可能令人困惑.在`git merge`中,'our'是当前在工作目录中的内容.但对于`git rebase`(或`git rebase -onto`),意思可以交换. (3认同)
  • 你应该检查是否有任何东西要藏起来。否则你会从早期的 `git stash` 中弹出隐藏的更改。 (3认同)
  • `git stash , git pull , git stash apply` 成功合并更改后,您可以使用以下命令删除存储: `git stash drop` (2认同)

Pet*_*ton 21

我用

git pull -X ours
Run Code Online (Sandbox Code Playgroud)

这将指示 git 在合并时使用本地版本。


Kur*_*tal 15

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

  • 检查[这个答案](http://stackoverflow.com/a/3970442/236871),您可以使用`.gitattributes`在合并时始终保持您的更改. (4认同)

Ujj*_*Roy 7

如果存在本地未提交的更改,以避免拉取时发生合并冲突:

git stash save
git pull
git stash pop
Run Code Online (Sandbox Code Playgroud)

来源:

https://git-scm.com/docs/git-stash


小智 6

我们还可以尝试 git pull 和 rebase

git pull --rebase origin dev
Run Code Online (Sandbox Code Playgroud)


Mar*_*air 5

更新:这从字面上回答了所提出的问题,但是我认为KurzedMetal的答案确实是您想要的。

假如说:

  1. 你在树枝上 master
  2. 上游分支masterorigin
  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
Run Code Online (Sandbox Code Playgroud)

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