为什么git会创建合并提交?以及如何删除这些?

pos*_*eid 7 git github

一位同事在一个功能上工作了几个星期,现在git提交看起来像:

colleag  add class  8b5bec5
colleag  add change 3535adc5
colleag  Merge branch 'NEW' of github.example.de:example/app into NEW   0cc2d24
colleag  add change
colleag  add validation     7eff440
colleag  rebase done wrong merge    f8e35e3
colleag  Merge branch 'NEW' of github.example.de:example/app into NEW   2168ac6
colleag  wrong merge    a6ed636
colleag  typo in spec   7b23633
Run Code Online (Sandbox Code Playgroud)

我猜他正在做:

git pull origin master
Run Code Online (Sandbox Code Playgroud)

在他的工作分支上.

所以,我的问题:

1)这是什么意思:

Merge branch 'NEW' of github.example.de:example/app into NEW    2168ac6 
Run Code Online (Sandbox Code Playgroud)

这是一个合并提交,但为什么git与远程合并?

2)是否可以清除这些合并提交?我目前正在挑选提交,但不确定这是否是最好的.

阅读git日志后还可以建议其他什么?

Sch*_*eis 18

这些提交是因为你的同事已经在他们当地的分支上做了一些工作,然后从遥控器中提取了新的提交.关键是git pull两个git命令的组合,git fetchgit merge.通常这些提交是相当无害的,但根据我的经验,它们偶尔会引起一些问题.

通过运行可以避免提交git pull --rebase origin master.这使拉动成为git fetch和的组合git rebase.这将保留本地提交并从远程引入提交,然后一次应用一个本地提交.至于你已经在遥控器中提交的提交,你可以尝试使用交互式rebase来清理它们,但这会导致比它值得更多的麻烦.我只是想改变你的同事的工作流程,把它们留在遥控器上.改变共享历史是一个风险,可能是一个痛苦的过程.

如果你只是接受你的同事认为应该没问题的提交,我不会选择合并提交.虽然一般来说,我更喜欢合并分支而不是尝试挑选提交,因为它会导致具有不同sha的相同补丁的提交,并且可能导致合并分支比应该更难.