2013-03-05 62 views
16

我检查了几个提交到master,应该已经检查到develop。我用什么git命令从主分支中删除这些提交并将其包含在开发分支中?如何将git从主服务器提交到不同的现有分支

+1

你看过这个答案吗? - http://stackoverflow.com/questions/1773731/in-git-how-do-i-remove-a-commit-from-one-branch-and-apply-it-to-a-different-bra?rq = 1个 – 2013-03-05 22:26:13

+0

看看这个:[布展最近提交到一个新分支] [1] [1]:http://stackoverflow.com/questions/1628563/move-recent -commit到一个全新的分支 – 2013-03-05 22:27:23

+0

因为有一个“这个问题可能已经有一个答案在这里”块顶部,只是想指出我的问题是不是移动到_new_分支,它是关于移动到不同_existing_分支 – gitq 2013-03-05 23:31:27

回答

5

您可以cherry-pick您提交到了develop事后交互rebasemaster分支:

  1. git checkout develop
  2. git cherry-pick aabbcc
  3. git cherry-pick ddeeff
  4. ....
  5. git checkout master
  6. git rebase 123456 -i

其中123456是一个承诺,你犯了一个错误之前。这将打开一个编辑器,显示每个将受到rebase影响的提交。删除与要放弃的提交相对应的行并退出编辑器。

6

对于应对到另一个分支则可以使用采摘樱桃:

git cherry-pick <commit> 

删除并不那么容易。您可以使用底垫和壁球或编辑承诺:

git rebase -i <commit>~1 

但重订时艇员选拔编辑的时候,我不知道你是否还可以编辑这些文件,而不是只提交信息。

+1

在交互式rebase期间'edit'可以让你编辑提交信息和文件,'reword'只允许你修改提交信息。 – 2013-03-05 22:32:12

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 

最后的命令将显示从头部所有审核到最后好提交,所有你需要做的就是删除提交到移动分支发展

25

如果我没有记错的线,你有两个同步分支, 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 

返回空结果。

接下来,得到master所有新提交到dev有:

git checkout dev 
git merge master 

现在回到你master

git checkout master 

删除不必要的提交:

git reset --hard HEAD~3 

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

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