我怎么知道GIT分支没有完全合并?

Rol*_*lie 6 git git-workflow

所以我对我目前的GIT工作流程(我是新手)的意见感兴趣,以及如何确定哪些更改尚未合并/推送到相应的存储库.首先,我当前的系统看起来像这样:

      remote.master
            |
            |
            V
      local.master
   |       |       |
   V       V       V
 branch  branch   branch
Run Code Online (Sandbox Code Playgroud)

对于新任务,我会从remote.master拉到local.master,创建一个新分支并检查它.我会在完成任务时做各种提交,也许会切换到其他任务,然后在准备好之后,将从remote.master拉到local.master,将我的分支合并到local.master,最后推送到remote.master.

所以2个问题:对于一个小团队来说,这是否有点过分?省略本地分支是否更有意义?如果是这样,一些建议表明存在"快速转发"问题(我理解它使remote.master中无法区分的更改)或者过多的具有潜在意外时间戳并且难以解析的提交.

2,假设上述工作流程:我有时会经常在任务之间切换.我想要一个显示我的屏幕:

'branch 01' -> partially merged to local.master 
'branch 04' -> notmerged to local.master 
'local.master' -> partially merged to remote.master
Run Code Online (Sandbox Code Playgroud)

如果各种功能已合并到哪里,我会忘记它.我绝对不想逐个分支,并尝试通过'git diff'或其他命令来判断这些信息.我目前在Windows上使用Tortoise GIT,但我对其他图形替代品持开放态度.我有时会使用shell,但更喜欢用户界面.有没有办法获得这些信息?

Sto*_*ica 6

无论您想在本地环境中做什么,都不过分。如果您想拥有100个本地分支机构,那完全由您决定,并且如果证明是(可能)过度杀伤力,则可以适当地缩减规模。

“快速转发的问题”是一个品味问题。如果两个分支没有分歧,Git的默认行为是快进而不是合并。像作者一样,我也不喜欢这样,但我不会称其为“问题”。作为一种解决方法,我执行如下合并:

# merge branch without fast forward and commit
git merge --no-ff --no-commit branchname

# code review
git diff

# commit the merge
git commit -m 'merged: branchname'
Run Code Online (Sandbox Code Playgroud)

我使用别名rev = merge --no-ff --no-commit来简化合并步骤git rev branchname(在“审查”中称为“ rev”,在“代码审查”中称为“ rev”)。

要仅查看合并提交的日志,请使用另一个别名: revlog = log --first-parent

由于我为每个功能使用单独的分支,因此可以看到项目演变中的重要步骤,例如变更日志。

对于第二个问题,我想您正在寻找以下命令:

# view the branches that have been merged already
git branch --merged

# view the branches that have NOT been merged yet
git branch --no-merged
Run Code Online (Sandbox Code Playgroud)

我不认识Tortoise,但是gitk很好,如果我没记错的话,它已经包含在Git Bash中了。