我们做了坏事。
我们在合并冲突期间运行了git stash save
,现在无法恢复我们的工作。
我们尝试过的东西:
git pull -Xours origin master
git stash apply --index
和:
git pull origin master
git stash save --keep-index "merge conflicts"
git stash apply stash@{1}
请帮帮我!
发布于 2012-09-21 04:21:58
问题似乎是git stash
没有保存对您试图合并的分支的引用。在合并过程中,它存储在一个名为MERGE_HEAD
的引用中。
要修复它并返回到以前的状态,您需要找到您试图合并的修订版(假设它是d7a9884a380f81b2fbf002442ee9c9eaf34ff68d),并在应用stash之后将MERGE_HEAD设置为它。
然后,您可以应用存储(使用--index重新存储之前存放的所有内容),并设置您的MERGE_HEAD
git stash apply --index
git update-ref MERGE_HEAD d7a9884a380f81b2fbf002442ee9c9eaf34ff68d
发布于 2013-08-10 08:19:35
今天我做了同样的事情,并采取了一种不同的方法(经过反复试验),在存储之前返回到状态,这样我就可以继续解决冲突并完成合并。
首先,在目标分支中解除部分合并后,我捕获了具有剩余冲突的文件列表(文本文件或编辑器选项卡)。这只是解除存储后未转移文件的列表,因为已解决冲突的文件将在存储之前转移。
$ git status
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: myproject/src/main/java/com/acme/package3/Class3.java
# modified: myproject/src/main/java/com/acme/package3/Class4.java
#
接下来,我创建了一个补丁,并将分支重置回预合并状态:
$ git diff HEAD > ~/merge-with-resolved-conflicts.patch
$ git reset --hard HEAD
然后我创建了一个临时分支(从合并目标分支派生而来),并应用了补丁:
$ git checkout -b my-temp-branch
$ git apply ~/merge-with-resolved-conflicts.patch
$ git commit -a -m "Merge with resolved conflicts"
因此,my-temp-branch的头部现在包含合并的所有内容,包括已解决冲突的文件和具有剩余冲突的文件。
然后我切换回原来的分支,再次合并,并查看git状态。
$ git checkout my-branch
$ git merge other-branch
$ git status
状态显示有冲突的文件的完整列表:
# Unmerged paths:
# (use "git add <file>..." to mark resolution)
#
# both modified: myproject/src/main/java/com/acme/package1/Class1.java
# both modified: myproject/src/main/java/com/acme/package2/Class2.java
# both modified: myproject/src/main/java/com/acme/package3/Class3.java
# both modified: myproject/src/main/java/com/acme/package3/Class4.java
#
现在我需要比较这两个文件列表。除第一个文件外,第二个列表中的所有文件都已被解析(在本例中为Class1.java和Class2.java)。因此,对于这些文件中的每一个,我拉入了从临时分支解决了冲突的版本(就像樱桃挑选一样,但针对单个文件,而不是整个提交):
$ git checkout my-temp-branch myproject/src/main/java/com/acme/package1/Class1.java
$ git checkout my-temp-branch myproject/src/main/java/com/acme/package2/Class2.java
完成此操作后,我回到了存储之前的状态,因此我可以继续解决剩余的冲突并提交合并。
发布于 2012-01-26 09:44:29
当您处于冲突状态(索引和工作目录)时,您将无法执行git stash
-它将给出一个错误,以满足未合并的条目。
确保你真的做了大量的工作。请参见git stauts
和git stash show
的输出
https://stackoverflow.com/questions/9009354
复制相似问题