Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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_Git Workflow - Fatal编程技术网

我如何判断哪些GIT分支没有完全合并?

我如何判断哪些GIT分支没有完全合并?,git,git-workflow,Git,Git Workflow,因此,我感兴趣的是关于我当前GIT工作流(我是新手)的看法,以及如何确定哪些更改尚未合并/推送到适当的存储库。首先,我当前的系统如下所示: remote.master | | V local.master | | | V V V branch branch branch # merge branch without fast for

因此,我感兴趣的是关于我当前GIT工作流(我是新手)的看法,以及如何确定哪些更改尚未合并/推送到适当的存储库。首先,我当前的系统如下所示:

      remote.master
            |
            |
            V
      local.master
   |       |       |
   V       V       V
 branch  branch   branch
# 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'
对于一个新任务,我将从remote.master拉到local.master,创建一个新分支并检查它。我会在处理任务时进行各种提交,可能会切换到其他任务,然后在准备就绪时,从remote.master拉到local.master,将我的分支合并到local.master,最后推到remote.master

所以有两个问题:对于一个小团队来说,这是不是太过分了?省略本地分支机构更有意义吗?如果是这样,则表明“快进”可能会出现问题(据我所知,快进会使远程.master中的更改无法区分),或者提交过多,可能会有意外的时间戳,并且很难解析

第二,假设上述工作流程:我有时会频繁地在任务之间切换。我想要一个屏幕,显示我:

'branch 01' -> partially merged to local.master 
'branch 04' -> notmerged to local.master 
'local.master' -> partially merged to remote.master

我可能会忘记是否合并了各种功能,以及合并到哪里。我绝对不想一个分支接一个分支,试图通过'gitdiff'或其他命令来获取这些信息。我目前在Windows上使用Tortoise GIT,但我对其他图形化的替代方案持开放态度。我有时确实使用shell,但更喜欢UI。有没有办法获得这些信息?

无论你想在本地环境中做什么,都不会过分。如果你想拥有100个本地分支机构,那完全取决于你,如果结果证明这是过度的(可能),那么你可以适当地缩小规模

“快进问题”是一个品味问题。Git的默认行为是快进,而不是在两个分支没有分叉的情况下合并。和作者一样,我也不喜欢这样,但我不会称之为“问题”。作为一种解决方法,我执行如下合并:

      remote.master
            |
            |
            V
      local.master
   |       |       |
   V       V       V
 branch  branch   branch
# 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 branchname
(在“review”中命名为“rev”,在“code review”中命名为“rev”)

要仅查看合并提交的日志,请使用另一个别名:
revlog=log——第一个父级

因为我对每个特性都使用单独的分支,所以通过这种方式,我可以看到项目发展过程中的大步骤,比如更改日志

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

# 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非常不错,它包含在GitBash中。

我不会忽略本地分支;默认情况下,
git branch
仅显示本地分支。但我认为你认为分支不仅仅是它们的实际情况:它们实际上只是某种“便签”,粘贴在特定的提交上。当您将某个内容提交到分支时,这会添加一个新的提交并向前移动便笺。实际的分支总是根据提交图动态确定的。让用户保持分支标签名称的合理性。