2014-11-23 27 views
5

我试图将本地修改的文件还原为最近上游的版本,有效地撤消了我的更改。如何覆盖上游版本未合并的git结帐

$ git checkout -- Jovie/Jovie-Info.plist 
error: path ‘Jovie/Jovie-Info.plist' is unmerged 

使用-f改变错误警告,但仍然不会做出改变(???)

$ git checkout -f -- Jovie/Jovie-Info.plist 
warning: path ‘Jovie/Jovie-Info.plist' is unmerged 

文件本身看起来像这样:

$ git diff Jovie/Jovie-Info.plist 
diff --cc Jovie/Jovie-Info.plist 
index 6c576d9,0209baa..0000000 
--- a/Jovie/Jovie-Info.plist 
+++ b/Jovie/Jovie-Info.plist 
@@@ -50,7 -50,7 +50,11 @@@ 
       </dict> 
     </array> 
     <key>CFBundleVersion</key> 
++<<<<<<< Updated upstream 
+  <string>5922</string> 
++======= 
+  <string>5918</string> 
++>>>>>>> Stashed changes 
     <key>Fabric</key> 
     <dict> 
       <key>APIKey</key> 

如何覆盖本地文件并应用上游更改?

+0

可能重复:无法撤消本地更改(错误:路径...未合并)](http://stackoverflow.com/questions/3021161/git-cant-undo-local-changes-error-path-is-unmerged) – Stewart 2017-04-04 10:10:15

回答

15

您可能需要先重新设置文件,做结帐前:

git reset -- Jovie/Jovie-Info.plist 
git checkout -- Jovie/Jovie-Info.plist 

复位取消阶段变动情况(这里的合并,与冲突标记的文件中)。
然后,结帐可以使用上次提交内容恢复索引。

4

如果你需要的所有都修改未合并的文件做的,有一个简单的方法来做到这一点的,而不是做的每一个:

git reset $(git status | grep both | awk '{print $4}') 
git checkout $(git status | grep modified | awk '{print $3}') 

如果你需要的所有由我们[添加/删除]未合并的文件,有一个简单的方法来做到这一点的,而不是做对每一个:

git reset $(git status | grep us | awk '{print $5}') 
git checkout $(git status | grep modified | awk '{print $3}') 

如果您需要做的所有他们[添加/删除]未合并的文件,有一个简单的方法来做到这一点的,而不是做每个一:[混帐

git reset $(git status | grep them | awk '{print $5}') 
git checkout $(git status | grep modified | awk '{print $3}')