【问题标题】:Proper git workflow with feature branches [duplicate]具有功能分支的正确 git 工作流程 [重复]
【发布时间】:2019-02-26 05:16:39
【问题描述】:

我想问一下正确的 git 工作流程。 假设我们有分支masterultraFeature

在创建ultraFeature 之后,开发人员添加了几个提交到分支和主控。他们正在引发冲突。

更新更改并使其在合并时快进的最佳方法是什么? 我也希望它在一次提交中完成。

我的实际解决方案。据我了解,如果有人使用我的分支或从我的分支创建分支,我将很危险。怎样才能做得更好?

git checkout master
git pull

git checkout ultraFeature
git pull

git reset --soft HEAD~N    // N is number of commits since creating branch
git commit -m "Summing all changes in branch..."

git rebase master
// solve conflicts

git checkout master
git merge ultraFeature

【问题讨论】:

  • Git 非常灵活,因此很多人会提供同样多的不同工作流程。特别是我,我喜欢保持功能分支“紧密”。他们没有合并。例如,当“master”向前移动时,我会重新设置基准,以便我可以从其他人那里获得更改,并且如果必须对这个功能分支进行精心挑选/重新设置基准,则可以轻松完成所需的原始修订一个接一个(因为没有合并,对吧?)。
  • 我会假设你的主人是稳定的。如果是这种情况,只需从您拥有的功能分支(每个功能都在一个分支中,对吗?至少它应该)打开对 master 的拉取请求并一一检查冲突,在外部合并工具中解决它们(不要使用 git 网站来合并,它可能会弄乱你的功能分支)。
  • @LeonardoAlvesMachado 我需要把它放在一个提交中。所以我发的方式是正确的?
  • 如果您唯一关心的是通过一次提交将您的代码从功能分支转移到主分支,您可能需要考虑 squash merge stackoverflow.com/questions/5308816/how-to-use-git-merge-squash

标签: git


【解决方案1】:

如果目标是将所有更改放在一个提交中,您可能可以使用以下方法将它们压缩在一起(对于 N 次提交,N 可以是任意数量的提交):

git rebase -i HEAD~N

如果目标是从 master 获取提交并在这些更改之上获得“压缩提交”(假设您的分支是从 master 创建的),请考虑以下事项:

>> // while being in <ultrafeature> branch
git fetch --all
>> git rebase origin/master

在这些命令之后,您的提交将位于最新的主提交之上。当然,如果有冲突,rebase 会失败,所以可以解决它们,然后继续 git rebase --continue

最后但并非最不重要的一点是,当您创建 Pull Request 并且您的同事开始发表评论并因此您进行了更多提交(例如 commitA、commitB 和 commitC)时, 您可以通过强制推送来压缩所有内容,然后“重新推送”更改:

git push -f ultrafeature

所以,总的来说,我使用以下技术:

//while being on master

git checkout ultrafeature
git commit, commit, commit // here is my work, say 3 commits
git rebase -i HEAD~3 // create one commit out of 3 when I'm done
git push -u origin ultrafeature 
// create a pull request
// my colleagues make comments, so I commit again and again (1 more commit)
git rebase -i HEAD~2 // unify a squashed commit with a new commit, in a trivial case it can be also git commit --amend
// now I'll be able to "submit" my changes:
git fetch --all
git rebase origin/master
git push -f
// merge / ff merge into master, usually in UI where I've opened a pull request

【讨论】:

    猜你喜欢
    • 2011-04-18
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多