git
仓库。#!/bin/bash -e
rm -rf example
git init example
cd example
echo 0 > file.txt
git add file.txt
git commit -am "initial commit"
git branch branch1
echo 1 > file.txt
git commit -am "1 (on master)"
git branch branch2
git checkout branch1
echo 2 > file2.txt
git add file2.txt
git commit -m "2 (on branch1)"
git merge --no-edit master
echo 3 > file2.txt
git commit -am "3 (on branch1)"
git checkout master
echo 4 > file.txt
git commit -am "4 (on master)"
git checkout branch1
git merge --no-edit master
echo 5 > file2.txt
git commit -am "5 (on branch1)"
git checkout branch2
echo 6 > file3.txt
git add file3.txt
git commit -m "6 (on branch2)"
git checkout master
git merge --no-edit branch2
git merge --no-edit branch1
上面的脚本从
master
分支创建了两个分支(branch1
和branch2
);我们多次将master
合并到branch1
中,最后将branch1
合并回master
。同时,在branch1
合并回来之前,我们将branch2
合并回master
。如果我在
master
上运行git log --graph --oneline
,结果看起来很复杂。* 4f71184 Merge branch 'branch1'
|\
| * d58e9f0 5 (on branch1)
| * b19c9b4 Merge branch 'master' into branch1
| |\
| * | 212f4d6 3 (on branch1)
| * | 1ac0082 Merge branch 'master' into branch1
| |\ \
| * | | 26cf8e0 2 (on branch1)
* | | | 9aaa8c5 Merge branch 'branch2'
|\ \ \ \
| |_|_|/
|/| | |
| * | | 425aead 6 (on branch2)
| | |/
| |/|
* | | 67a7fed 4 (on master)
|/ /
* | 6a56133 1 (on master)
|/
* 0d4f076 initial commit
在这个例子中,我主要关注
master
和branch1
之间的合并;我不关心其他分支上合并到master
的提交。在这种情况下,只有另一个分支(branch2
),它只有一个提交,所以它不会对图表造成太大的影响,但当有很多分支参与时,情况会变得更加复杂,但我只想关注master
和branch1
。如果我使用
git log --graph --oneline --first-parent master branch1
命令,图表看起来几乎正确,只观察master
和branch1
的第一个父节点,但是即使它们的第二个父节点出现在日志中,合并提交也没有绘制合并线。* 4f71184 Merge branch 'branch1'
| * d58e9f0 5 (on branch1)
| * b19c9b4 Merge branch 'master' into branch1
| * 212f4d6 3 (on branch1)
| * 1ac0082 Merge branch 'master' into branch1
| * 26cf8e0 2 (on branch1)
* | 9aaa8c5 Merge branch 'branch2'
* | 67a7fed 4 (on master)
* | 6a56133 1 (on master)
|/
* 0d4f076 initial commit
我认为我想要的东西是这样的,日志中删除branch2
提交425aead
。(再次说明,虽然不太清晰,但如果有更多像branch2
这样的分支,这个值就会更加明显。)
* 4f71184 Merge branch 'branch1'
|\
| * d58e9f0 5 (on branch1)
| * b19c9b4 Merge branch 'master' into branch1
| |\
| * | 212f4d6 3 (on branch1)
| * | 1ac0082 Merge branch 'master' into branch1
| |\ \
| * | | 26cf8e0 2 (on branch1)
* | | | 9aaa8c5 Merge branch 'branch2'
| \ \ \
| _|_|/
|/ | |
| |/
| /|
* | | 67a7fed 4 (on master)
|/ /
* | 6a56133 1 (on master)
|/
* 0d4f076 initial commit
有没有办法在这里得到我想要的东西?