我该如何知道哪些GIT分支没有完全合并?

6

我对我的GIT工作流(我是新手)的意见很感兴趣,以及如何确定我的哪些更改尚未合并/推送到适当的存储库。首先,我的当前系统如下:

      remote.master
            |
            |
            V
      local.master
   |       |       |
   V       V       V
 branch  branch   branch

对于一个新的任务,我会从远程主分支拉取到本地主分支,创建一个新的分支并检出。在处理任务时,我可能会进行各种提交,也许会切换到其他任务,然后当准备好时,会从远程主分支拉取到本地主分支,将我的分支合并到本地主分支,最后推送到远程主分支。
所以有两个问题:对于小团队来说,这是否过度设计?省略本地分支是否更有意义?如果是这样,some advice建议会有“快进”问题(我理解为使远程主分支中的更改不可区分)或者大量提交,具有潜在的意外时间戳,并且难以解析。
第二,假设上述工作流程:我有时频繁地在不同任务之间切换。我想要一个屏幕,显示给我:
'branch 01' -> partially merged to local.master 
'branch 04' -> notmerged to local.master 
'local.master' -> partially merged to remote.master

有时我会忘记各种功能是否已经合并,以及合并到了哪里。我绝对不想逐个分支地尝试通过“git diff”或其他命令来推断这些信息。我目前在Windows上使用Tortoise GIT,但也可以考虑其他图形界面的替代方案。我有时会使用shell,但更喜欢UI。有没有一种方法可以获得这些信息?


我不会省略本地分支;默认情况下,git branch 仅显示本地分支。但我认为你可能认为分支比它们实际上更重要:它们实际上只是一种类似于“便笺”的东西,粘贴到特定的提交上。当你将某些内容提交到分支时,这会添加一个新的提交并将便笺向前移动。实际的分支始终是根据提交图动态确定的。用户需要保持分支标签名称合理。 - torek
1个回答

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'

我使用别名rev = merge --no-ff --no-commit来简化合并步骤为git 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

我不知道Tortoise是什么,但是如果我没记错的话,gitk相当不错,它应该包含在Git Bash中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接