如何解决由于 "git stash apply" 导致的“删除/修改”冲突

22

最近我执行了git stash,然后在分支上进行了一些工作并提交了它,在尝试执行git stash apply时出现了这些错误:

CONFLICT (delete/modify): app/controllers/orders_controller.rb deleted in Updated upstream and modified in Stashed changes. Version Stashed changes of app/controllers/orders_controller.rb left in tree.
CONFLICT (content): Merge conflict in app/models/product.rb

git status显示如下内容:

 $ git status
# On branch develop
# Your branch is ahead of 'origin/develop' by 16 commits.
# Unmerged paths: 
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#   deleted by us:      app/controllers/orders_controller.rb
#   both modified:      app/models/product.rb

“delete/modify”标记的文件是我在执行stash前新增的文件,还没有提交。
我想回到git stash命令之前的状态,也就是我的本地修改还没有被提交。请问你有没有办法可以实现这个目标?

谢谢。

4个回答

17

这对我很有效。

做a -

git mergetool

然后您将被要求选择已修改或删除的文件,或者中止操作,完成后再执行一次操作-

git mergetool
这将解决合并冲突,然后您可以弹出暂存的更改。

我不明白这里的“已删除文件”是什么意思,然后我删除了存储的文件,现在有没有办法恢复它们。 - Krishna Oza
删除的文件意味着已经被删除的文件,即您从项目中删除的文件。 - raj240

11

您正在将暂存区应用到不同的状态,该状态有一个额外的提交。更糟糕的是,这个提交引入了合并冲突,就像您所知道的那样。

您有两个选择:

  1. 将该stash应用到最新提交,并解决冲突
  2. 将该stash应用到之前的提交。

听起来你想做的是第二种情况。请使用:

    git stash branch new_branch [<stash>]  # <stash> will be the last one if not provided.

谢谢。我刚意识到我使用了“储藏应用”在错误的分支上。有没有办法在此分支上撤销“储藏应用”? - stupakov
在执行“stash apply”之前,错误的分支是否已经干净?还是你执行了“stash apply”或“stack pop”? - GoZoner
它很干净,我执行了“stash apply”。 - stupakov
4
在错误的分支上,执行 'git reset --hard' 命令,这将删除所有由 'stash apply' 引入的本地更改(在工作目录中)。然后您可以从问题中检出原始分支(“develop”),并按照我的建议应用存储。 - GoZoner

2

0

你需要解决冲突! 由于你更新了最新的仓库,两个文件project.rb和orders_controller.rb在最新的仓库中已经被修改。同时,你本地的更改(stash)也修改了这两个文件,当你应用它们时,就会产生冲突。

你需要解决冲突才能应用你的本地更改。

对于第一个文件orders_controller.rb, 最新的仓库已经删除了,当你推送后续提交时,你想保留它还是不保留?

对于第二个文件project.rb, 你需要解决文件中的冲突。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接