如何使用上游版本覆盖未合并的git checkout

Max*_*ler 6 git merge conflict git-checkout

我正在尝试将本地修改的文件还原到最近上游的版本,从而有效地撤消我的更改.

$ git checkout --  Jovie/Jovie-Info.plist
error: path ‘Jovie/Jovie-Info.plist' is unmerged
Run Code Online (Sandbox Code Playgroud)

使用-f更改错误警告,但仍然不会进行更改(???)

$ git checkout  -f -- Jovie/Jovie-Info.plist
warning: path ‘Jovie/Jovie-Info.plist' is unmerged
Run Code Online (Sandbox Code Playgroud)

文件本身如下所示:

$ 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>
Run Code Online (Sandbox Code Playgroud)

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

Von*_*onC 16

在执行检出之前,您可能需要先重置文件:

git reset -- Jovie/Jovie-Info.plist
git checkout -- Jovie/Jovie-Info.plist
Run Code Online (Sandbox Code Playgroud)

重置会取消正在进行的更改(此处为合并,文件中包含冲突标记).
然后结帐可以使用最后一次提交内容恢复索引.


Thi*_*rro 5

如果您需要对所有两个已修改的未合并文件执行此操作,有一种简单的方法可以执行此操作,而不是对每个文件执行此操作:

git reset $( git status | grep both | awk '{print $4}')
git checkout $( git status | grep modified | awk '{print $3}')
Run Code Online (Sandbox Code Playgroud)

如果您需要对我们未合并的所有[添加/删除]文件进行操作,有一种简单的方法可以做到这一点,而不是对每个文件都进行操作:

git reset $( git status | grep us | awk '{print $5}')
git checkout $( git status | grep modified | awk '{print $3}')
Run Code Online (Sandbox Code Playgroud)

如果您需要对未合并文件的所有[添加/删除]执行此操作,有一种简单的方法可以做到这一点,而不是对每个文件执行以下操作:

git reset $( git status | grep them | awk '{print $5}')
git checkout $( git status | grep modified | awk '{print $3}')
Run Code Online (Sandbox Code Playgroud)