3

例如,当我从 master -> production 合并时,我想在我错误地提交之前查看提交列表。就像是:

$ git merge --doublecheck master
Commits to merge:
1292642 fix foo
3c0f30b cleanup bar
Do you want to proceed? (y/n)
4

4 回答 4

4

您可以使用修订范围双点..语法来执行此操作:

git log --oneline --graph <branch-to-merge-into>..<branch-to-be-merged>

输出将是所有<branch-to-be-merged>不在<branch-to-merge-into>.

您可以在免费在线 Pro Git 书籍的Commit Ranges部分中了解有关此和其他修订范围语法的更多信息。

于 2013-09-02T19:31:52.050 回答
1

--no-commit您可以使用和--no-ff标志阻止 Git 自动提交:

git merge master --no-commit --no-ff

如果当前分支和主分支已经分歧,那就--no-commit足够了。如果 master 只是提前几个修订,那么 Git 将自动快进,在这种情况下实际上并没有提交。防止这种--no-ff自动快进。

如果您这样做,则合并导致的更改将处于挂起状态,而不是提交。我在进行代码审查时这样做,因为在这种状态下很容易区分。如果您经常这样做,那么在您的 中为它创建一个别名是很实用的~/.gitconfig,例如:

rev = merge --no-ff --no-commit

最后,我重置并让 Git 进行提交,因为它会生成一个很好的提交日志作为合并修订的所有提交日志的摘要。

于 2013-09-02T19:52:01.900 回答
0

另一种技巧是使用--no-commitand -no-ff选项(类似于git commit --dry-run选项),这样就可以看到实际的结果。请参阅 merge(1) 手册页的示例部分。

另请参阅SO/is-there-a-git-merge-dry-run-optiongit merge without auto commit

于 2013-09-02T19:54:54.743 回答
0

我在这里接受了一些建议并编写了一个小脚本git-safemerge

 $ git safemerge master
 Commits:
  * bc911ef Fix bug in widget
  * e80f8d1 Clean things up

 Changes:
  foo.py   |  12 ++--
  bar.py   |  35 +++++-----
  2 files changed, 47 insertions(+), 47 deletions(-)

 Fast-forward: not possible

 Continue merging master into prod? (y/n)

它可以在:https ://gist.github.com/wolever/6416735

于 2013-09-02T20:03:37.530 回答