如何将git提交从master转移到另一个现有分支

时间:2013-03-05 22:23:14

标签: git branch

我检查了master的一些提交,这些提交应该已经检入develop。我用什么git命令从master分支中删除那些提交并包含在develop分支中?

4 个答案:

答案 0 :(得分:40)

如果我没弄错的话,你有两个同步的分支, masterdev,只是忘了切换分支, 在你提交之前。

如果是这种情况,我们有:

----------------
git log in dev

xxx
yyy
...
----------------

----------------
git log in master

ccc
bbb
aaa
        <---- here you forgot to switch branch
xxx
yyy
...
----------------

解决方案是:

首先,请确保:

git status -s

返回空结果。

接下来,使用以下内容从masterdev获取所有新提交内容:

git checkout dev
git merge master

现在回复你master

git checkout master

删除不必要的提交:

git reset --hard HEAD~3

数字~3是您要删除的提交数。

请记住:git status -s必须返回空结果。 否则,git reset --hard会导致数据丢失。

答案 1 :(得分:7)

为了应对另一个分支,你可以使用樱桃采摘:

git cherry-pick <commit>

删除并不容易。您可以使用rebase和squash或编辑提交:

git rebase -i <commit>~1

但是我不确定在rebase期间选择编辑是否可以编辑文件而不是仅提交消息。

答案 2 :(得分:6)

您可以cherry-pick将您的提交转到develop,然后以rebase master分行git checkout develop

  1. git cherry-pick aabbcc
  2. git cherry-pick ddeeff
  3. git checkout master
  4. ....
  5. git rebase 123456 -i
  6. 123456
  7. 其中{{1}}是您犯错之前的提交。这将打开一个编辑器,显示将受到rebase影响的每个提交。删除与要放弃的提交相对应的行,然后退出编辑器。

答案 3 :(得分:0)

通常有几种方法可以用git做同样的事情:

git checkout develop
git cherry-pick XXX // XXX being the sha1 of the commit you want to grab
git checkout master
git rebase --interactive HEAD~IDX // IDX being the position of the last "good" commit compared to HEAD

最后一个命令将显示从HEAD到最后一次良好提交的所有审核,您所要做的就是删除提交行以转移到分支开发