相关疑难解决方法(0)

Git分支模型适合您?

我们公司目前正在使用简单的主干/发布/修补程序分支模型,并希望了解哪些分支模型最适合您的公司或开发过程.

  1. 工作流程/分支模型

    以下是我所看到的三个主要描述,但它们彼此部分相互矛盾,或者不足以解决我们遇到的后续问题(如下所述).因此,我们的团队到目前为止默认不是那么好的解决方案.你做得更好吗?

  2. 合并与变基(纠结与连续历史)

    是应该pull --rebase还是等待合并回到主线直到你的任务完成?我个人倾向于合并,因为这保留了一个任务开始和完成的基础的视觉图示,我甚至更喜欢merge --no-ff这个目的.然而,它有其他缺点.还有许多人没有意识到合并的有用属性 - 它不是可交换的(将主题分支合并到master中并不意味着将master合并到主题分支中).

  3. 我正在寻找一个自然的工作流程

    有时会发生错误,因为我们的程序无法通过简单的规则捕获特定情况.例如,早期版本所需的修复当然应该足够下游,以便可以将上游合并到所有必要的分支中(这些术语的使用是否足够清楚?).然而,在开发人员意识到它应该被放置在更下游之前,并且如果已经推送(更糟糕的是,合并或基于它的某些东西)之后,修复使其成为主人,那么剩下的选项就是挑选,其相关的危险.您使用了哪些简单的规则?同样在这包括一个主题分支的尴尬必然排除其他主题分支(假设它们从共同基线分支).开发人员不希望完成一个功能来启动另一个功能,感觉就像他们刚写的代码不再存在

  4. 如何避免创建合并冲突(由于挑选)?

    创建合并冲突的可靠方法似乎是在分支机构之间进行挑选,它们永远不会再次合并?在任一分支中应用相同的提交(如何执行此操作?)可能会解决这种情况?这是我不敢推动基于合并的工作流程的一个原因.

  5. 如何分解成外用分支?

    我们意识到从主题分支组装完成的集成是很棒的,但是我们的开发人员经常工作没有明确定义(有时像"戳"一样简单),如果某些代码已经进入"misc"主题,根据上面的问题,它不能再被带出去了吗?您如何使用定义/批准/毕业/发布您的主题分支?

  6. 代码审查和毕业等适当的程序当然是可爱的.

    但是我们根本无法保持足够的东西来管理这个 - 任何建议?整合分支,插图?

以下是相关问题列表:

还要看看Plastic SCM在任务驱动开发上写的内容,如果不是Plastic的选择,请研究nvie的分支模型及其支持脚本.

git merge workflow release cherry-pick

371
推荐指数
3
解决办法
6万
查看次数

如何在Git中将特定提交从一个分支合并到另一个分支?

我有BranchA113个提交BranchB.

但我只希望将最后10个左右的提交BranchA合并到BranchB.

有没有办法做到这一点?

git github

151
推荐指数
3
解决办法
12万
查看次数

git:合并两个分支:什么方向?

我们有以下情况:

             A --- B --- C --- ... --- iphone
           /
  ... --- last-working --- ... --- master
Run Code Online (Sandbox Code Playgroud)

在上次工作和iPhone之间,进行了3​​2次提交.在last-working和master之间,做了很多提交.

我现在想要的是一个新的分支,我将iphone和当前的主人合并在一起.在以后的某个时间,这应该合并到主人.

首先,我计划做:

git checkout iphone -b iphone31
git merge master
Run Code Online (Sandbox Code Playgroud)

但后来我想,如果做得更好:

git checkout master -b iphone31
git merge iphone
Run Code Online (Sandbox Code Playgroud)

现在我想知道.结果会有什么不同?合并会有不同的表现吗?

我已经尝试了两种,正如我所料,我遇到了很多冲突,因为与主人相比,iphone真的很老了.现在我想知道合并它们的最简单方法.

也许甚至从大师开始并将每一次提交的iphone合并到它会更容易?喜欢这样做:

git checkout master -b iphone31
git merge A
git merge B
git merge C
...
git merge iphone
Run Code Online (Sandbox Code Playgroud)

最后,当这个合并完成时(即所有冲突都已解决且工作正常),我想这样做:

git checkout master
git merge iphone31
Run Code Online (Sandbox Code Playgroud)

git merge git-merge

61
推荐指数
3
解决办法
7万
查看次数

git merge --no-commit vs git cherry-pick --no-commit

有什么区别git merge --no-commitgit cherry-pick --no-commit

如果我遵循这两个命令后,历史上有什么不同吗?

git git-merge git-cherry-pick

34
推荐指数
2
解决办法
2万
查看次数

在git中合并rebase的优势是什么?

本文中,作者使用此图解释了变基:

alt text http://eagain.net/articles/git-for-computer-scientists/git-history.7.png

Rebase:如果您还没有发布您的分支机构,或者已经清楚地告知其他人不应该以此为基础,那么您可以选择其他方式.您可以重新分支您的分支,而不是合并,您的提交将被另一个具有不同父级的提交所取代,并且您的分支将被移动到那里.

而正常的合并将如下所示:

alt text http://eagain.net/articles/git-for-computer-scientists/git-history.5.png

所以,如果你重订,你只是失去了一个历史状态(这将是垃圾回收在将来某个时候).那么,为什么有人想要做一次变革呢?我在这里错过了什么?

git algorithm version-control dvcs

18
推荐指数
1
解决办法
4443
查看次数

Git cherry pick和datamodel完整性

鉴于两个分支已经分歧,并且需要将一个分支(而不是所有内容)的特定提交引入另一个分支,git cherry pick就是这样.

一段时间后,需要完全合并两个分支.git将如何知道它已经过去曾经提交过的提交,以便它不会重新引入它?

git version-control merge cherry-pick

16
推荐指数
2
解决办法
2683
查看次数

Gerrit总是在提交补丁集之前进行rebase以避免合并提交

我发现在Gerrit Web界面中单击"提交补丁集"时,它只是简单地向该分支添加提交,或者如果之前提交了另一个提交,则创建合并提交.

创建2提交的示例:实际提交和合并提交:

  1. 用户根据提交O提交补丁集A.
  2. 用户根据提交O提交补丁集B.
  3. 提交补丁集A.
  4. 提交补丁集B - >在O - > A和O - > B之间创建合并提交

有一个"Rebase Change"按钮很棒,但这意味着要提交补丁集,每个人都应该这样做:

  1. 单击Rebase Change
  2. 单击" 提交更改集"

我看到合并提交有用的唯一原因是保留提交的日期(但我确实理解为什么在没有rebase的情况下需要它).

是不是有自动rebase或至少检查以避免产生不需要的合并提交?

merge submit rebase gerrit

12
推荐指数
1
解决办法
1万
查看次数

Git - 如果我想拥有一致的工作流程,挑选樱桃是一种不好的做法吗?

我发现cherry-pick在某些情况下特别有用,例如,当我有一个feature1分支和一个test-feature1分支时,我想应用测试中发现的更正;或者换句话说,我想测试新功能,为此我需要在测试分支中使用这些新功能。

cherry-pick这里的好处是我可以选择我想在其他分支中应用的具体更改;也许合并整个分支并不有趣。

我在过去的项目中一直在使用它,但我认为这种做法会导致工作流程不一致。是cherry-pick-ing一个不推荐和可避免的做法?

git cherry-pick

10
推荐指数
2
解决办法
5846
查看次数

将提交从一个分支移动到另一个分支,然后将它们合并回来

我有一棵树:

       /--b1---b2 <-- topic b
      /    
a1---a2 <-- topic a
Run Code Online (Sandbox Code Playgroud)

其中'b'取决于'a'.然后我意识到我需要做一些与主题'a'相关的更改以继续'b',但我想在'b'上做它们作为'b'的正常开发过程:

       /--b1---b2---a3---a4---b3---b4---a5---b5 <-- topic b
      /    
a1---a2 <-- topic a
Run Code Online (Sandbox Code Playgroud)

然后,当我想在'b'上完成的事情完成时,我希望我的树看起来像这样:

       /--b1---b2--------m---b3'---b4'---b5' <-- topic b
      /                 /
a1---a2---a3'---a4'---a5' <-- topic a
Run Code Online (Sandbox Code Playgroud)

好像我实际上对'a'进行了所有更改,然后将它们合并在'b'上,然后继续'b'.

我知道我可以手动执行此操作:

1- rebase/cherry-pick'a'从分支'b'提交到'a'2-在'b'上
创建一个时间分支'b-tmp'.
3-将分支'b'重置为'b2'.
4-将'a'合并到'b'上.
5- rebase/cherry-pick'b'从'b-tmp'提交到'b'.
6-删除分支'b-tmp'.

我可以创建一些脚本来执行此操作,我只想知道是否有更好的方法/想法来执行此操作,除了这6个步骤.

git

8
推荐指数
1
解决办法
1478
查看次数