繁体   English   中英

如何在不提交更改的情况下移动到另一个分支?

[英]How to move to another branch without committing changes?

在我的项目中,我有分支ab 我正在处理a并想切换到处理b上的功能。 但是,我在a中的代码不在 state 中,在那里进行提交是有意义的。 Git 不允许我切换到b 如何在不提交a情况下切换到b

您可以存储您的更改:

git stash
git checkout b
git commit -am 'finish work on b'
git checkout a
git stash pop

可以使用git checkout后跟--force标志切换到现有分支丢失更改

git checkout YOUR_BRANCH_NAME --force

使用临时分支来进行更改

您当前在分支a上并且有一些未提交的更改。 让我们创建一个分支并将这些更改提交到该分支。 git分支很便宜。 随心所欲地创建它们,完成后删除它们。

git checkout -b a-temp
git add .
git commit

这将创建并切换到一个新分支a-temp 您的临时更改将提交给a-temp a保持不变。 现在,让我们切换到b并尝试cherry-pick它们:

git checkout b
git cherry-pick a-temp

一个成功的cherry-pick 向b添加了一个提交,它具有以前未提交的更改。 让我们再次取消提交它们:

git reset HEAD^

现在,他们不再提交,而b就是它原来的样子。 最初未提交的更改仍然未提交。

一个失败cherry-pick表示未提交的更改与b分支冲突。 你自己去弄清楚为什么; 但是,首先,让我们放松一下,让 go 回到之前的状态。

git cherry-pick --abort
git checkout a
git cherry-pick a-temp      # guaranteed to work, since a-temp branched off a
git reset HEAD^

现在您又回到a ,具有相同的未提交更改。 您可以花时间找出合并冲突的原因,以及您需要做些什么。

在所有情况下,让我们删除临时分支,以便稍后您可以再次尝试此技巧:

git branch -D a-temp

这种方法比使用存储多一点工作,但在合并冲突的情况下更安全一些。 我经常混淆git stash popgit stash drop ,不得不做一些清理工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM