git用远程版本替换本地版本


148

我如何告诉git忽略我的本地文件并从我的远程分支中获取一个文件而不尝试合并并引起冲突?


1
有关当前所有可能的模拟方法,请参见答案“ 使一个分支像另一个分支的git命令 ” 。git merge -s their
VonC

如果您可以提供更多详细信息,将很有帮助。您是否要采用远程分支中所有文件的内容,还是仅采用某些文件的内容(即保留某些本地版本/更改)?您是否要保留任何本地历史记录?(如果还有其他分支机构或存储库已经合并了本地历史记录,则这可能很重要。)如果要保留本地历史记录,以后打算如何处理?(您可以留下一个指向本地历史记录的标签,然后将分支重置为遥控器所拥有的名称,或者您可能希望“合并他们的”)。
克里斯·约翰森

1
还有一个类似这样的线程在有问题的地方重置本地存储库分支就像远程存储库HEAD
mico

Answers:


169

这是最安全的解决方案:

git stash

现在,您可以做任何您想做的事情而不必担心冲突。

例如:

git checkout origin/master

如果要将远程更改包括在master分支中,可以执行以下操作:

git reset --hard origin/master

这将使您分支“ master”指向“ origin / master”。


90
可能值得指出的是,这将使HEAD脱离-发问者可能更愿意留在分支上git stash; git fetch origin; git reset --hard origin/master
Mark Longair 2011年

10
我认为Mark Longair的评论是对该问题的实际答案

这对我来说是最有用的答案+1
Andres

如何回到之前的状态git stashgit stash list是空的。
Leo

我想拥抱你
Ugur Kazdal

45

我理解这样的问题:您想从上游完全替换一个文件(或选择内容)的内容。您不想直接影响索引(因此您将像往常一样执行add + commit)。

简单地做

git checkout remote/branch -- a/file b/another/file

如果要对大量子树执行此操作,而希望直接影响索引,请使用

git read-tree remote/branch:subdir/

然后,您可以(可选)通过以下方式更新您的工作副本:

git checkout-index -u --force

2
这正是我想要的。谢谢。
AutonomousApps

11

我的理解是,例如,您错误地保存了仅用于测试目的而更新的文件。然后,当您运行“ git status”时,文件显示为“ Modified”,并说了一些不好的词。您只需要恢复旧版本即可继续正常工作。

在这种情况下,您可以运行以下命令:

git checkout -- path/filename

10

我会从“ master”(远程/原始存储库)中签出远程文件,如下所示:

git checkout master <FileWithPath>

示例:git checkout主组件/indexTest.html


对我来说,这样的工作“ git checkout remotes / origin / master <我的文件>”
saravanakumar,

4

结合使用-s或选项。在您的特定问题中,您想保留所有远程文件并替换相同名称的本地文件。 --strategy-X

用远程版本替换冲突

git merge -s recursive -Xtheirs upstream/master  

将使用所有冲突文件的远程仓库版本。

用本地版本替换冲突

git merge -s recursive -Xours upstream/master

将使用所有冲突文件的本地仓库版本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.