昨天,开发人员在主服务器中进行了大量提交,破坏了一些代码并且之前没有创建分支来执行此操作。
提交列表是:
+ da1cd10 --> HEAD
+ 48f70a1
+ 3b94ae5
+ a808c65
+ 92ee96f --> Commit starting changes
+ 194dc5c
+ 2e2c5e0
|
master
提交“92ee96f”移动文件,添加了几个影响其他开发人员的文件夹。上面列出的所有提交都在bitbucket中。
现在,我需要在特定分支中分离提交“92ee96f”,并继续使用下面的其他提交主机:
master
|
| new branch
| |
da1cd10 + |
48f70a1 + |
3b94ae5 + |
a808c65 + |
| + 92ee96f --> Commit starting changes
|/
+ 194dc5c
+ 2e2c5e0
|
master
这可能吗?以及我如何做到这一点?
答案 0 :(得分:2)
92ee96f
开始的提交移动到新分支。
我的回答是基于此great article的示例。
当您检出主分支时,请执行
git branch new-branch
“master”和“new-branch”都会指向最后一次提交 - da1cd10
git checkout master
#小心下一个命令:确保“git status”为
#clean,你肯定是在“主人”和
#“new-branch”分支在提交194dc5c之后进行了所有提交。
git reset --hard <SHA1sum of commit 194dc5c>
现在主人会指向194dc5c和新分支到da1cd10。
然后当你向master添加新的提交(例如a808c65)时,你会得到你想要的东西
2e2c5e0--194dc5c---- ... --- ... --- ... ("master")
\
92ee96f --- ... --- da1cd10 ("new-branch")
答案 1 :(得分:1)
我们将分两步打破您的解决方案:
第1步:为 92ee96f 提交创建分支。
因此,使用以下命令创建新分支:
git checkout -b new-branch 194dc5c
现在你的新分支在194dc5c提交时有HEAD。 Cherry-选择你对这个新分支的必要提交。
git cherry-pick 92ee96f
现在你有了一个新的分支,根据需要提交92ee96f。
第2步:从主分支树中删除 92ee96f 提交。
如果您已经推送了提交,那么请使用&#34; git revert 92ee96f&#34; 命令。
否则,请使用以下命令删除此提交。
git rebase -i HEAD
这将在交互模式下启动rebase -i,就在您要进行提交之前的那一刻。编辑器将从那时开始列出所有提交。删除包含要删除的提交的行并保存文件。 Rebase将完成剩余的工作,仅删除该提交,并将所有其他提交重新放回日志中。 然后,如果你想推动你的改变,
git push --force origin master
我希望我的回答能够满足你提问的意图。