Resolve conflicts using remote changes when pulling from Git remote
我试图将代码从Github repo拉到服务器上,但由于合并冲突,拉操作一直失败。我不想保留自上次拉取之后本地服务器上可能发生的任何更改。
那么有没有一种方法可以强迫Git用GitHub中的任何版本覆盖它,而不是让我为冲突而烦恼呢?
- 重复?stackoverflow.com/questions/4779715/…
- @NVM:没有。这是关于真正的合并冲突,而不是将被覆盖的未跟踪文件。
如果你真的想放弃你在当地所做的承诺,也就是说,再也没有在历史上做过承诺,你不会问如何拉-拉意味着合并,你也不需要合并。你所需要做的就是:
1 2 3 4
| # fetch from the default remote, origin
git fetch
# reset your current branch (master) to origin's master
git reset --hard origin/master |
号
我个人建议首先在您当前的头上创建一个备份分支,这样如果您意识到这是一个坏主意,您就不会忘记它。
另一方面,如果您希望保留这些提交并使其看起来像是与origin合并,并使合并仅保留来自origin的版本,则可以使用ours合并策略:
1 2 3 4 5 6 7 8
| # fetch from the default remote, origin
git fetch
# create a branch at your current master
git branch old-master
# reset to origin's master
git reset --hard origin/master
# merge your old master, keeping"our" (origin/master's) content
git merge -s ours old-master |
- 在第二块git命令中……在第二个命令之后应该有一个"git fetch origin"吗?
- @大卫:是的,你应该在某个时候从原点取。对不起,我认为这是含蓄的。
- 当涉及到我和git;-)时,没有什么可以暗示的。不过,说真的,谢谢你。你的答案正是我想要的。
- 如果原点在前面,这是否有效?和中一样,如果我前面没有任何提交,并且实际上分支可以快速转发,那么我还可以使用它吗?
- 谢谢!让它看起来很容易。
- 这可以解决Windows上的文件命名案例冲突。
- 为什么要创建备份?如果你搞砸了,你就不能靠反射波"回到过去"来说话吗?
您可以使用NVM指向的重复链接的答案。
或者,您可以通过使用它们的更改来解决冲突(但如果某些更改与远程版本不冲突,则可能保留这些更改):
1
| git pull -s recursive -X theirs |
- 似乎不适合我。我得到"错误:未知开关‘X’",使用Git Git版本1.5.6.5。我需要升级到不稳定的版本吗?
- 另外,安托万,如果你想得到所有东西的起源版本,而不仅仅是冲突的内容,你可以-看到我的答案。
- 最后,NVM的回答不是重复的。这不是合并冲突(内容在双方都被跟踪,有差异)的实例,而是一个覆盖未跟踪内容的合并。
- 是的,我喜欢你的回答。使用ours策略非常有趣。
- 如果您记住合并的正确方向几乎是从主题分支到master的,那么使用ours策略就更明显了。
- 抱歉,当我说"不稳定"时,我的意思是Debian软件包存储库中似乎没有最近发布的更稳定的git版本:packages.debian.org/lenny/git-core
- @david您可以从backports.debian.org获得Debian的最新版本的Git。
- -s recursive是默认值,所以git pull -X theirs就足够了。
- 这正是我要找的!
- @ceestimmerman不是真的,至少在最近的Git中是这样。合并策略是通过X选项来实现的,只有recursive如果合并两个头,那么你的命令会抱怨"Could not find merge strategy 'theirs'. Available strategies are: octopus ours recursive resolve subtree."——很遗憾,因为X可以在config(如git config pull.twohead theirs中设置,但是s不能。