具有功能分支的正确git工作流程

时间:2018-09-21 19:06:05

标签: git

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

在创建ultraFeature之后,开发人员将一些提交添加到branch和master。他们正在引起冲突。

更新更改使其合并后快速前进的最佳方法是什么? 我也希望一次提交即可完成。

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

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

1 个答案:

答案 0 :(得分:1)

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

git rebase -i HEAD~N

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

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

执行这些命令后,您的提交将位于最新的主提交之上。当然,如果发生冲突,重新设置将失败,因此可以解决它们,然后继续进行git rebase --continue

最后但并非最不重要的一点是,当您创建“拉取请求”并且您的同事开始发表评论时,因此您进行了更多的提交(例如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