[英]How to move to another branch without committing changes?
在我的项目中,我有分支a
和b
。 我正在处理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 pop
和git stash drop
,不得不做一些清理工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.