我开了个藏宝箱,合并发生了冲突。与被列为重复的问题不同,我已经在我想保留的目录中有一些未提交的更改。我不只是想让合并冲突消失,还想让我的目录恢复到弹出窗口之前的状态。
我尝试了git合并-abort,但git声称没有合并正在进行中。是否有一种简单的方法来中止弹出,而不破坏我原来在目录中的更改?
我开了个藏宝箱,合并发生了冲突。与被列为重复的问题不同,我已经在我想保留的目录中有一些未提交的更改。我不只是想让合并冲突消失,还想让我的目录恢复到弹出窗口之前的状态。
我尝试了git合并-abort,但git声称没有合并正在进行中。是否有一种简单的方法来中止弹出,而不破坏我原来在目录中的更改?
当前回答
如果你只有存储的更改,试试下面的一行。它删除了当前的每个局部更改。
Git checkout -f
其他回答
编辑:从弹出部分的git帮助隐藏文档:
应用状态可能会因冲突而失败;在这种情况下,它不会从收藏列表中删除。你需要手动解决冲突,然后手动调用git stash drop。
如果使用了——index选项,则不仅尝试恢复工作树的更改,还尝试恢复索引的更改。但是,当您有冲突时(冲突存储在索引中,因此您不能再像最初那样应用更改),这可能会失败。
试着硬拷贝你所有的repo到一个新目录(这样你就有了一个副本),然后运行:
Git stash显示和保存输出的地方,如果你关心它。
然后:git stash下降下降冲突的stash 然后:git重置头
这应该会使您的回购处于之前的状态(希望,我仍然无法重现您的问题)
===
我试图重现你的问题,但我得到的所有当使用git stash流行是:
error: Your local changes to the following files would be overwritten by merge:
...
Please, commit your changes or stash them before you can merge.
Aborting
在一个干净的目录下:
git init
echo hello world > a
git add a & git commit -m "a"
echo hallo welt >> a
echo hello world > b
git add b & git commit -m "b"
echo hallo welt >> b
git stash
echo hola mundo >> a
git stash pop
我没有看到git试图合并我的更改,它只是失败了。你有什么我们可以帮助你的重现步骤吗?
使用git reflog列出在git历史中所做的所有更改。复制一个动作id,输入git reset ACTION_ID
好吧,我想我已经解决了"git stash unapply"。它比git apply -reverse更复杂,因为你需要反向合并操作,以防git stash apply做了任何合并。
反向合并要求所有当前更改都被推入索引:
Git add -u
然后反转由git stash apply完成的合并递归:
——$(Git write-tree) stash@{0}^1
现在你将只剩下非隐藏的变化。它们会在索引中。如果你愿意,你可以使用git重置来取消你的更改。
鉴于你最初的git stash应用失败了,我假设反向也可能失败,因为它想要撤消的一些事情没有完成。
下面是一个例子,展示了工作副本(通过git状态)如何再次干净:
$ git status
# On branch trunk
nothing to commit (working directory clean)
$ git stash apply
Auto-merging foo.c
# On branch trunk
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: foo.c
#
no changes added to commit (use "git add" and/or "git commit -a")
$ git add -u
$ git merge-recursive stash@{0}: -- $(git write-tree) stash@{0}^1
Auto-merging foo.c
$ git status
# On branch trunk
nothing to commit (working directory clean)
尝试使用if跟踪文件。
git rm <path to file>
git reset <path to file>
git checkout <path to file>
简单的一行
我总是用
Git重置—合并
我不记得它曾经失败过。
注意:git重置——合并将丢弃任何阶段性更改。此外,正如@Saroopashree Kumaraguru在评论中指出的那样,隐藏的内容不会丢失,以后可以重新应用。