我想问一下正确的git工作流程。
假设我们有分支master
和ultraFeature
。
在创建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
答案 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