Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从git日志中排除合并的分支_Git - Fatal编程技术网

从git日志中排除合并的分支

从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

是否可以从历史记录中省略合并的分支以获得更清晰的视图

动机 为了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 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
    的祖先。这就是我想要避免的。我试图澄清这个问题。