我有一棵看起来如下的树
B
/ \
A D
\ /
C
B和C不冲突。我想要的是它在我的历史中显示为A-B-C-D。
我怎样才能在git中执行此操作?我搜索过但我找不到一个我认为适用的答案。我担心做出改变,因为我不想让事情变得更糟,我不知道如何撤消它(有没有办法在git中撤消最后一个git命令?)
答案 0 :(得分:2)
如果您想测试一下,只需克隆您的存储库并在克隆中播放。
$ git clone your_repo test_repo
$ cd test_repo
在您的情况下,D
应该只是一个合并提交,如果B
和C
不冲突则不会包含太多。所以一个简单的rebase将起作用
$ git rebase branch_of_B branch_of_C
在空的存储库中尝试:
echo A > file1
git add file1
git commit -m A
git checkout -b B
echo B > file2
git add file2
git commit -m B
git checkout master
git checkout -b C
echo C > file3
git add file3
git commit -m C
git checkout -b merge_branch
git merge B
echo D > file4
git add file4
git commit -m D
您现在拥有此功能(运行gitk --all
):
B
/ \
A M - D
\ /
C
你在D
。你可以发出
$ git rebase B
First, rewinding head to replay your work on top of it...
Applying: C
Applying: D
你离开了:
A - B - C' - D'
\
C
C'
和D'
在“内容”方面与C
和D
相同。如果要清理,可以在此示例中删除分支C
,但是您必须强制它,因为这将使原始C
提交悬挂。
$ git branch -D C