我开始修改我的代码库,没有意识到我是在一个旧的主题分支上。为了转移它们,我想把它们藏起来,然后应用到master的新分支。我使用git stash pop将正在进行的更改转移到这个新分支,忘记了在创建新分支之前我没有将新更改拉入master。这导致了一系列合并冲突,并丢失了一个干净的更改存储库(自从我使用pop以来)。

一旦我正确地重新创建了新分支,我该如何恢复隐藏的更改以正确地应用它们?


当前回答

事实证明,Git足够聪明,如果应用不干净,就不会丢弃存储。我能够通过以下步骤达到所需的状态:

要取消合并冲突的分级:git reset HEAD。(注意后面的点)要保存冲突的合并(以防万一):git stash要返回到master:git checkout master要获取最新的更改:git fetch upstream;git合并上游/主要更正我的新分支:gitcheckoutnewbranch;git重基主机要应用正确的隐藏更改(现在是堆栈中的第二个):git stash apply stash@{1}

其他回答

git checkout -f

必须工作,如果您以前的状态是干净的。

小心:小心–您将丢失对文件的所有未跟踪更改。

最简单的命令,它适用于任何地方,包括git stash pop、git merge等。

但要小心!您将丢失对未跟踪文件的所有更改。跟踪的文件保持完整

git reset --merge

这里的说明有点复杂,所以我将提供更直接的内容:

git reset HEAD—hard放弃对当前分支的所有更改…必要时进行中介工作git stash pop在你准备好后的某个日期再次打开存储

幸运的是,在发生冲突的情况下,git stash pop不会更改存储!

所以不用担心,只需清理代码并重试。

假设您的代码库以前是干净的,您可以使用:gitcheckout-f返回到该状态然后做你忘记的事情,例如gitmerge缺少分支在那之后,只要再次打开git存储,你就会得到同样的存储,这之前是冲突的。

请记住:存储是安全的,但是,工作目录中未提交的更改当然不是。他们可能会搞砸。

事实证明,Git足够聪明,如果应用不干净,就不会丢弃存储。我能够通过以下步骤达到所需的状态:

要取消合并冲突的分级:git reset HEAD。(注意后面的点)要保存冲突的合并(以防万一):git stash要返回到master:git checkout master要获取最新的更改:git fetch upstream;git合并上游/主要更正我的新分支:gitcheckoutnewbranch;git重基主机要应用正确的隐藏更改(现在是堆栈中的第二个):git stash apply stash@{1}