从git日志中排除合并的分支
是否可以从历史记录中省略合并的分支以获得更清晰的视图 动机 为了Gerrit的评论和干净的历史,我注定要挤进主分支 为了在本地保留我的全部历史,我在压扁后从大师那里撤回。本质上从git日志中排除合并的分支,git,Git,是否可以从历史记录中省略合并的分支以获得更清晰的视图 动机 为了Gerrit的评论和干净的历史,我注定要挤进主分支 为了在本地保留我的全部历史,我在压扁后从大师那里撤回。本质上 git checkout master git merge --squash ticket-branch # ... wait until code review has passed git pull origin master git checkout ticket-branch git merge --no-ff
git checkout master
git merge --squash ticket-branch
# ... wait until code review has passed
git pull origin master
git checkout ticket-branch
git merge --no-ff master
实际上,在代码被接受后,我会推动代码审查并从origin/master
合并回来,但这不会影响问题
这可能导致难以阅读的历史,如:
>>> git log --graph --all --oneline >>> git log --graph --all --oneline --author-date-order
* 7bef64f (master) Commit 19 * 7bef64f (master) Commit 19
* 7e42958 Commit 18 | * 11a808c (HEAD -> ticket-branch) Merge branch...
* ff9df00 Commit 17 | |\
* 835b71d Commit 16: More changes on master * | | 7e42958 Commit 18
| * 11a808c (HEAD -> ticket-branch) Merge branch... | * | 83e1780 Commit 14
| |\ * | | ff9df00 Commit 17
| |/ | * | a02d52c Commit 11
|/| * | | 835b71d Commit 16: More changes on master
* | ca35688 Commit 15 | |/
* | f3bc917 Commit 13 |/|
* | 4025a7e Commit 12 | * 3dda274 Commit 10
* | f29e4b8 Commit 9 * | ca35688 Commit 15
* | b8ac49d Commit 5 | * 381ba96 Commit 8
| * 83e1780 Commit 14 * | f3bc917 Commit 13
| * a02d52c Commit 11 | * b5c11cd Commit 7
| * 3dda274 Commit 10 * | 4025a7e Commit 12
| * 381ba96 Commit 8 * | f29e4b8 Commit 9
| * b5c11cd Commit 7 | * ad976de Commit 6
| * ad976de Commit 6 * | b8ac49d Commit 5
| * fc02828 Commit 4 | * fc02828 Commit 4
|/ |/
* 70e48a8 Commit 3 * 70e48a8 Commit 3
* 8cc2643 Commit 2 * 8cc2643 Commit 2
* 45385ec Commit 1: Faking a master history. * 45385ec Commit 1: Faking a master history.
* f7f20a7 initial commit * f7f20a7 initial commit
工作示例
我使用了以下命令序列来创建模型:
rm -rf '/tmp/squash-history-demo'
mkdir -p '/tmp/squash-history-demo'
cd '/tmp/squash-history-demo'
git init
touch a b; git add a b; git commit -m 'initial commit'
git checkout master
echo 1 > a; git commit --all -m 'Commit 1: Faking a master history.'
git checkout master
echo 2 > a; git commit --all -m 'Commit 2'
git checkout master
echo 3 > a; git commit --all -m 'Commit 3'
: work proceeds on ticket branch an master in parallel
git checkout -b ticket-branch
git checkout ticket-branch
echo 4 > b; git commit --all -m 'Commit 4'
git checkout master
echo 5 > a; git commit --all -m 'Commit 5'
git checkout ticket-branch
echo 6 > b; git commit --all -m 'Commit 6'
git checkout ticket-branch
echo 7 > b; git commit --all -m 'Commit 7'
git checkout ticket-branch
echo 8 > b; git commit --all -m 'Commit 8'
git checkout master
echo 9 > a; git commit --all -m 'Commit 9'
git checkout ticket-branch
echo 10 > b; git commit --all -m 'Commit 10'
git checkout ticket-branch
echo 11 > b; git commit --all -m 'Commit 11'
git checkout master
echo 12 > a; git commit --all -m 'Commit 12'
git checkout master
echo 13 > a; git commit --all -m 'Commit 13'
git checkout ticket-branch
echo 14 > b; git commit --all -m 'Commit 14'
git checkout master
echo 15 > a; git commit --all -m 'Commit 15'
: -- Squash merge
git merge --squash ticket-branch
git checkout ticket-branch
git merge --no-ff master
git checkout master
git checkout master
echo 16 > a; git commit --all -m 'Commit 16: More changes on master'
git checkout master
echo 17 > a; git commit --all -m 'Commit 17'
git checkout master
echo 18 > a; git commit --all -m 'Commit 18'
git checkout master
echo 19 > a; git commit --all -m 'Commit 19'
git checkout ticket-branch
git log --oneline --graph --all --decorate=short
票务分支机构
未合并到主系统
<代码>主机已合并到该票务分支
git log
时显示所有分支。您正在使用显示所有分支的--all
标志。如果不使用该标志,则只会看到当前分支的历史记录所以。。。。你想保留所有的历史记录,但你也想将其压缩为PR,以便合并为master?我认为,合并是可以实现的。。。。比如说,branch featureX(从master创建)有4条直线提交,没有合并 所以。。。。现在是公共关系的挤压时间。让我们离开它所在的分支
git checkout -b prX #branch for pr X
# this is one way I squash
git reset --soft HEAD~4 # set branch pointer 4 revisions back... all changes for featureX are in index
git commit -m "Feature X"
# push this branch so that the PR is created
# then, when the branch is merged to master:
git checkout featureX # original development branch for the feature
git merge -m "merging changes from master" master
现在您已将压缩版本和原始开发工作保留在您的私人分支机构中请记住,如果您在完成PR时在远程压缩,则远程存储库和本地存储库将不同步。您的本地分支机构似乎永远不会合并到主分支机构中。
git log
的功能是遍历提交图,在遍历过程中,打印有关每个(或某些选定子集)已遍历提交的内容。您可以使用修改漫游的选项,例如--第一个父项
,以及修改打印哪些提交漫游的选项,例如历史简化部分中的选项。如果其中一个(或它们的组合)做了你想做的,那就是使用它。但是可能没有任何内置的东西可以满足您的需要。在这种情况下,主要的障碍(我相信)是通过git merge--squash生成的提交不是一个合并,因此没有与原始提交序列的链接,因此,图表中没有任何内容可以协调这些内容。@t请确认合并不会导致任何特殊问题,因为我会合并回票证分支。因为我知道在那个时候母版包含了我想要的票务分支
,所以我可以git merge-X他们的母版
;这也确保了下一次我可以进行另一次挤压合并。(注意-X他们的
的自动解析;根据您的情况,它可能会错误地解析某些冲突。您真正想要的是-s他们的
,它不存在,但可以合成。但这是一个单独的问题。)在这种情况下,您有一个合并提交,它将确定在提交图遍历期间要删除的内容,但是,git log
本身并不能用于修剪。因此,git log
将无法执行此操作。如果你基本上编写了自己的修订行走程序,你自己的git日志
——它可以理解你如何使用图形,你可以实现你想要的;这就是导致难以阅读的开发树的原因,也是我想从日志中省略部分历史的原因。我试图澄清这个问题。我将看到所有祖先,包括从master
合并到ticket branch
的祖先。这就是我想要避免的。我试图澄清这个问题。