在本地分支上,不想提交更改,但需要切换到另一个分支

Sul*_*man 9 git git-stash git-checkout git-commit

我正在分支A上工作,功能/任务没有完成.然后我需要切换到另一个分支B进行快速修复.当我尝试打开另一个分支时,Git强制我保存我的本地更改,否则我将丢失所有本地更改.

我需要提交我的不完整代码.有没有什么方法可以在不提交和丢失任何代码的情况下在多个分支之间切换?还是有更好的方法来处理这种情况?

mip*_*adi 12

您可以使用git stash,这将保存您的更改而不创建提交.1

首先,隐藏您的更改:

$ git stash
Run Code Online (Sandbox Code Playgroud)

然后切换到您的其他分支:

$ git checkout branch-B
Run Code Online (Sandbox Code Playgroud)

当您正在阅读时,请返回原始分支并取消暂停更改:

$ git checkout branch-A
$ git stash pop
Run Code Online (Sandbox Code Playgroud)

有关其他用例的更多详细信息和详细信息,请参阅上面链接的文档.


1从技术上讲,它确实创建了一个提交,但是git stash使用了一些魔法,所以你实际上看不到提交,而Git的工具知道如何正确处理这些伪提交.


小智 11

正如mipadi所示,其中一个选择就是简单地使用git stash.

另一个选择是简单地只提交当前正在进行的工作,切换分支,然后当您准备切换回来时,执行混合重置回到之前的提交:

# While working on "feature" branch,
# you suddenly need to go work on a hotfix:
$ git commit --all --message "Backup my feature work"
$ git checkout -b hotfix master

# You did your hotfix, and are ready to go back to feature
$ git checkout feature
$ git reset head^
Run Code Online (Sandbox Code Playgroud)

git reset head^在执行备份提交之前,将对提交执行混合重置,并且您在备份提交中所做的所有更改都将还原到您的工作副本.从官方的Linux内核文档git reset(强调我的):

重置索引但不重置工作树(即保留更改的文件但未标记为提交)并报告尚未更新的内容.这是默认操作.