首页 > 解决方案 > 具有功能分支的正确 git 工作流程

问题描述

我想问一下正确的 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

解决方案


如果目标是将所有更改放在一个提交中,您可能可以使用以下方法将它们压缩在一起(对于 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

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

推荐阅读