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

vawmfj5a  于 2023-10-14  发布在  Git
关注(0)|答案(3)|浏览(207)

我正在处理分支branch-A,功能/任务还没有完成。然后我需要切换到另一个分支branch-B进行快速修复。当我尝试打开另一个分支时,Git强制我保存我的本地更改,否则我将丢失所有的本地更改。
我需要提交我不完整的代码。有没有什么方法可以在多个分支之间切换而不提交和丢失任何代码?或者有更好的方法来处理这种情况吗?

tf7tbtn2

tf7tbtn21#

一种选择,如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^会在你进行备份提交之前进行混合重置,你在备份提交中所做的所有更改都会恢复到你的工作副本。official Linux Kernel documentation for git reset(强调我的):
重置索引但不重置工作树(即,* 保留更改的文件,但不标记为提交 *),并报告未更新的内容。这是默认操作。

gj3fmq9x

gj3fmq9x2#

您可以使用git stash,它将保存您的更改,而无需创建提交。1
首先,隐藏您的更改:

$ git stash

然后切换到另一个分支:

$ git checkout branch-B

当你准备好了,回到你原来的分支并释放你的更改:

$ git checkout branch-A
$ git stash pop

有关其他用例的更多详细信息和细节,请参阅上面链接的文档。
1从技术上讲,它确实创建了一个提交,但是git stash使用了一些魔法,所以你实际上看不到提交,而Git的工具知道如何正确处理这些伪提交。

bnlyeluc

bnlyeluc3#

我知道这个问题很老了,我只想分享一个可以帮助你处理这种情况的技巧。实际上,您可以将其提交到分支,然后在以后撤消它。

1.提交到分支。(只承诺。不要推。)

$ git commit --all --message "Commit Message here."

2.如果您想继续在分支上工作,只需 checkout 并撤消上次提交,而不会丢失最新的更改。

$ git reset --soft HEAD~1

注意--soft标志:这确保了未撤消的修订中的更改被保留。运行命令后,您将在工作副本中找到未提交的本地修改。
你可以阅读更多here

相关问题