你把它复杂化了。将 git 中的所有内容都视为本地操作并忽略其他人,并将远程 repo 视为共享存储区域。
听起来(如果我没听错的话)你们每个人都在 master 工作,但同时推动 origin/master 和 origin/dev-something。这可行,但可能会令人困惑。如果您在 master 中工作,请推送到 master。如果您想推送到 dev-something,请在 dev-something的本地副本中工作。
听起来你有它,如果你想合并所有远程的东西,这样做:
git fetch --all
git checkout master
git merge origin/master origin/dev-me origin/dev-other
[resolve conflicts]
git push origin master:master
如果您决定使用变基,则需要将每个远程分支按顺序变基到 master 上,这虽然为您提供线性历史记录,但并不能真正代表并行开发的现实。另外,您需要决定谁的更改“首先”。
我建议,如果你们每个人都在本地 dev-whatever 分支中工作并专门推送到该分支的上游版本,那会更好。当您想将代码导入 master 时,请检查 master 的本地副本,合并您的本地 dev-whatever 副本,然后将您的本地 master 备份。因此:
git checkout dev-whatever
git fetch --all
git merge origin/dev-whatever
[hack hack hack]
git commit -a
git push origin dev-whatever:dev-whatever
[decide you want to integrate what you've got into master]
git checkout master
git merge dev-whatever
git push origin master:master
如果你们两个都这样做,那么你们将各自整合自己的更改。如果您的同事已经推送,您的推送与他/她自己的合并更改,您的推送将失败。不用担心,此时您需要做的就是:
git fetch --all
git merge origin/master
[resolve conflicts]
git push origin master:master
在这种情况下,您可以将 merge 替换为 rebase,只需使用“他得到他们的第一个”方法来决定提交顺序。