我开始更改我的代码库,没有意识到我处于旧主题分支上。为了转移它们,我想将它们隐藏起来,然后将它们应用到 master 的新分支上。我使用
git stash pop
将正在进行的更改转移到这个新分支,忘记了在创建新分支之前我没有将新更改拉到 master 中。这导致了一堆合并冲突,并丢失了我的更改的干净存储(因为我使用了 pop)。
正确重新创建新分支后,如何恢复隐藏的更改以正确应用它们?
事实证明,Git 足够聪明,不会在应用不干净的情况下删除存储。我通过以下步骤达到了所需的状态:
git reset HEAD .
(注意尾随点)git stash
git checkout master
git fetch upstream; git merge upstream/master
git checkout new-branch; git rebase master
git stash apply stash@{1}
幸运的是,在发生冲突时,
git stash pop
不会更改存储!
所以没什么好担心的,只需清理你的代码并重试即可。假设您的代码库之前是干净的,您可以通过以下方式返回到该状态:
git checkout -f
git merge missing-branch
之后,只需再次触发git stash pop
,您就会得到之前发生冲突的相同存储。 请记住:存储是安全的,但是,工作目录中的“未提交”更改当然不安全。他们可能会搞砸。
最简单的命令,它在任何地方都适用,包括
git merge
等
但是要小心!您将丢失未跟踪文件的所有更改。跟踪的文件保持完整
git reset --merge
这里的说明有点复杂,所以我将提供更简单的内容:
git reset HEAD --hard
...
git stash pop
git checkout -f
如果您像我一样并且有
stash
中查看每个单独文件的已知稳定版本来避免丢失该工作。希望这些文件与您正在处理的文件不同。另外,这就是为什么我们在进行时使用小提交,愚蠢的愚蠢。
git checkout main -- <file_with_conflicts>
我认为 包括
如果您有未跟踪的文件和未合并的路径。