master
我签入了一些应该签入的提交develop
。我使用什么 git 命令从主分支中删除这些提交并包含在开发分支中?
问问题
37222 次
4 回答
53
如果我没记错的话,你有两个同步的分支,
master
和dev
,只是在你提交之前忘记切换分支。
如果是这样,我们有:
----------------
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
可能会导致数据丢失。
于 2013-03-06T17:07:46.557 回答
16
您可以cherry-pick
将您的提交提交到您的分支develop
,然后以交互方式提交:rebase
master
git checkout develop
git cherry-pick aabbcc
git cherry-pick ddeeff
- ……
git checkout master
git rebase 123456 -i
123456
犯错之前的提交在哪里。这将打开一个编辑器,显示每个受变基影响的提交。删除与您要丢弃的提交相对应的行并退出编辑器。
于 2013-03-05T22:30:35.743 回答
8
为了应对另一个分支,您可以使用樱桃采摘:
git cherry-pick <commit>
删除不是那么容易。您可以使用 rebase 和 squash 或编辑提交:
git rebase -i <commit>~1
但是我不确定在变基期间选择编辑时是否也可以编辑文件而不是只编辑提交消息。
于 2013-03-05T22:30:50.173 回答
1
通常有几种方法可以在 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 到最后一次良好提交的所有评论,您所要做的就是删除提交的行以移动到分支开发
于 2013-03-05T22:33:30.180 回答