我开了个藏宝箱,合并发生了冲突。与被列为重复的问题不同,我已经在我想保留的目录中有一些未提交的更改。我不只是想让合并冲突消失,还想让我的目录恢复到弹出窗口之前的状态。
我尝试了git合并-abort,但git声称没有合并正在进行中。是否有一种简单的方法来中止弹出,而不破坏我原来在目录中的更改?
我开了个藏宝箱,合并发生了冲突。与被列为重复的问题不同,我已经在我想保留的目录中有一些未提交的更改。我不只是想让合并冲突消失,还想让我的目录恢复到弹出窗口之前的状态。
我尝试了git合并-abort,但git声称没有合并正在进行中。是否有一种简单的方法来中止弹出,而不破坏我原来在目录中的更改?
当前回答
合并——只有当你合并其他分支代码并且它有冲突时才会中止。
git merge --abort
如果stash pop有冲突,你可以使用:
git reset --merge
其他回答
使用git reflog列出在git历史中所做的所有更改。复制一个动作id,输入git reset ACTION_ID
我用不同的方法解决了这个问题。事情是这样的。
首先,我碰到了错误的分支,产生了冲突。存储仍然完好无损,但是索引在冲突解决中,阻塞了许多命令。
简单的git重置HEAD会中止冲突解决,并留下未提交(和不需要的)更改。
几个git co <filename>将索引恢复到初始状态。最后,我用git co <branch-name>切换了分支,并运行了一个新的git stash pop,解决了没有冲突的问题。
如果在git隐藏弹出之前没有阶段性的更改,那么下面两个命令应该可以工作。
git diff --name-only --cached | xargs git checkout --ours HEAD
git ls-tree stash@{0}^3 --name-only | xargs rm
第一种方法将从存储中反转任何合并,不管成功与否。第二个删除由隐藏引入的任何未跟踪的文件。
从man git stash:工作目录必须匹配索引。@DavidG指出,如果当前任何未分段修改的文件发生冲突,隐藏弹出将失败。因此,除了返回HEAD之外,我们不应该担心解除合并冲突。任何剩余的修改文件都与存储无关,并且是在存储弹出之前修改的
如果有阶段性的变化,我不清楚我们是否可以依赖相同的命令,你可能想尝试@Ben Jackson的技巧。建议表示赞赏。
下面是针对所有不同情况的测试设置https://gist.github.com/here/4f3af6dafdb4ca15e804
# Result:
# Merge succeeded in m (theirs)
# Conflict in b
# Unstaged in a
# Untracked in c and d
# Goal:
# Reverse changes to successful merge m
# Keep our version in merge conflict b
# Keep our unstaged a
# Keep our untracked d
# Delete stashed untracked c
如果你只有存储的更改,试试下面的一行。它删除了当前的每个局部更改。
Git checkout -f
好吧,我想我已经设法找到了一个工作流程,可以让你回到你需要的地方(就像你没有做流行一样)。
事先做个备份!!我不知道这是否适用于你,所以复制你的整个回购以防它不起作用。
1)修复合并问题,并通过选择所有来自补丁的更改来修复所有冲突(在tortoisemerge中,这显示为一个)。REMOETE(他们的))。
git mergetool
2)提交这些更改(它们已经通过mergetool命令添加)。给它一个“合并”的提交消息或其他你记得的东西。
git commit -m "merge"
3)现在你仍然会有你最初开始的本地未分阶段的变化,从补丁中重新提交(我们可以稍后摆脱这个)。现在提交未分阶段的更改
git add .
git add -u .
git commit -m "local changes"
4)反转补丁。这可以通过以下命令来完成:
git stash show -p | git apply -R
5)提交以下更改:
git commit -a -m "reversed patch"
6)取消patch/unpatch提交
git rebase -i HEAD^^^
从中删除带有“merge”和“reversed patch”的两行。
7)找回你的unstancing changes,并撤销“local changes”的提交
git reset HEAD^
我已经运行了一个简单的例子,它让你回到你想要的地方-直接在隐藏之前被弹出,与你的本地变化和隐藏仍然可用的弹出。