我做了git stash save
然后git pull
git stash pop
现在我遇到了冲突,我想将一个文件重置为与pull相同,以便从存储中删除更改(我有其他更改)在我想保留的其他文件中。
我试过了:
git checkout -f inst/app/server.R
但得到了警告:
warning: path 'inst/app/server.R' is unmerged
并且文件没有变化,我内部仍然有冲突标记。如何从上次提交中检出该文件?
答案 0 :(得分:1)
TL; DR:听起来你想要git checkout --ours inst/app/server.R
。
您正处于冲突合并的中间,因此有两个"最后一次提交" s。一个是你的HEAD(当前)提交。请注意,您当前的提交是您在运行命令时所使用的提交,除非您的命令是git rebase
,在这种情况下,事情会被交换:请参阅What is the precise meaning of "ours" and "theirs" in git?由于您说的是最后一个命令,合并冲突失败的是git stash apply
, 1 您当前的提交是您git pull
为您成功git merge
后所做的提交, 2 ,另一个提交是当前git stash
stash-bag中名为stash@{0}
(又名stash
)的几个提交之一。
(任何冲突的合并中都会涉及第三次提交,这是合并基础。它可能不太重要了,这有点奇怪,但值得一提请注意,如果您在Git配置中将merge.conflictStyle
设置为diff3
,那么您将在{{1}之间获得一组额外的冲突标记|||||||
的合并基础版本}和<<<<<<<
部分向您显示&#34;我们的&#34;以及&#34;他们的&#34;版本。我希望保持>>>>>>>
设置,因为它告诉我之前有什么 - 并且他们都以相互冲突的方式更改了文件。)
如果在没有命名特定提交或使用diff3
或git checkout
选项的情况下运行--ours
,Git会尝试从索引中获取版本。 (请记住,索引 - 也称为临时区域,有时也称为缓存 - 您正在构建下一次提交的位置。)但是,冲突的合并会在索引中留下每个冲突文件的三个版本。 Git并不知道要获得哪一个,所以它失败了。使用--theirs
告诉--ours
复制&#34;我们的&#34; (即HEAD)从索引到工作树的文件版本;使用git checkout
告诉--theirs
复制&#34;其他&#34; (即MERGE_HEAD)文件的版本。 3
当您从索引中提取其中一个版本时,会在索引中保留其他两个版本,即使文件处于未解析合并状态。 仔细检查内容以确保您拥有正确的版本,然后git checkout
该文件以解决冲突。这将消除三个单独的索引版本,将工作树版本放入&#34;已解决的#34;索引槽(槽零)。
如果您需要重新创建合并冲突,可以使用git add
(仅当 git checkout -m -- path
类似于选项时才需要--
,但这是一个很好的习惯。这可以运行,直到您运行path
来完成失败的合并。
一旦按照您想要的方式解决所有问题,请使用git commit
完成合并。
1 您说git commit
,但git stash pop
只是一个捷径,意思是&#34;运行git stash pop
然后,当且仅当成功时,运行git stash apply
。&#34;由于应用步骤失败,因此您必须手动运行git stash drop
,一旦您确信存储已干净地应用并已提交。
2 我建议避免git stash drop
。它所做的就是为你运行另外两个Git命令:git pull
,然后是git fetch
或git merge
,具体取决于你事先告诉Git的内容。最好分别运行这两个命令,以便:
git rebase
提取的内容后选择合并或变种。使用git fetch
并没有什么根本性的错误,只记得它真的git pull
,你必须决定&#34;&#34;&#34;&#34;部分提前。如果你不挑选一个,Git会选择git fetch && git something
,这可能是错误的默认值,但是Git首先做的就是2005年,因此无法改变。 : - )
3 没有git merge
选项,但您可以使用gitrevisions
syntax从索引--base
访问它。您可以使用相同的语法来获取git checkout -- :1:path
版本(索引条目#2)和--ours
版本(#3),但它更容易记住{{1无论如何,还是--theirs
。
&#34;我们的&#34;版本有时被称为本地版本,以及&#34;他们的&#34;版本有时被称为远程版本,但我讨厌这些名称。 &#34;遥控&#34;特别是很容易混淆像--ours
等遥控器和远程跟踪分支名称,如--theirs
。