我正在分支A上工作,但功能/任务尚未完成。然后我需要切换到另一个分支B进行快速修复。当我尝试打开另一个分支时,Git 会强制我保存本地更改,否则我将丢失所有本地更改。
我需要提交我不完整的代码。有什么方法可以在多个分支之间切换而不会提交和丢失任何代码?或者有没有更好的方法来处理这种情况?
我正在分支A上工作,但功能/任务尚未完成。然后我需要切换到另一个分支B进行快速修复。当我尝试打开另一个分支时,Git 会强制我保存本地更改,否则我将丢失所有本地更改。
我需要提交我不完整的代码。有什么方法可以在多个分支之间切换而不会提交和丢失任何代码?或者有没有更好的方法来处理这种情况?
正如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^
git reset HEAD^
将在您进行备份提交之前对提交进行混合重置,并且您在备份提交中所做的所有更改都将恢复到您的工作副本。来自(强调我的)的官方 Linux 内核文档:git reset
重置索引但不重置工作树(即保留更改的文件但未标记为提交)并报告尚未更新的内容。这是默认操作。
您可以使用git stash
,这将在不创建提交的情况下保存您的更改。1
首先,隐藏您的更改:
$ git stash
然后切换到您的另一个分支:
$ git checkout branch-B
当你阅读时,回到你原来的分支并取消你的更改:
$ git checkout branch-A
$ git stash pop
有关其他用例的更多详细信息和细节,请参阅上面链接的文档。
1从技术上讲,它确实创建了一个提交,但git stash
使用了一些魔法,因此您实际上看不到提交,而且 Git 的工具知道如何正确处理这些伪提交。
我知道这个问题很老,我只想分享一种可以帮助您处理这种情况的技术。您实际上可以将其提交到分支并稍后撤消它。
1. 提交到分支。(仅提交。不要推动。)
$ git commit --all --message "Commit Message here."
2. 如果您想继续在分支上工作,只需签出并撤消您的最后一次提交,而不会丢失您的最新更改。
$ git reset --soft HEAD~1
请注意 --soft 标志:这可确保保留未完成的修订中的更改。运行命令后,您会在工作副本中发现更改为未提交的本地修改。
你可以在这里阅读更多。