开发人员 A(我自己)有一个本地存储库和一个远程存储库,远程存储库是开发人员 B 存储库的分支,本地存储库是远程存储库的克隆。 当开发人员 B 要求我对程序代码进行更改时,开发人员 A 在 RStudio 中执行更改(在本例中),开发人员 A 转到 SourceTree,打开本地存储库,提交程序的更改,推送更改到我的远程仓库和上游仓库。一切都很同步,我们很高兴。
但是,如果开发人员 B 拒绝开发人员 A 的更改,那么我的本地和远程存储库现在与上游不同步,Git 将不允许我推送任何更改。由于无知,我所做的是删除本地和远程存储库,再次 fork 远程,将其克隆到本地,重做更改,在源代码树中提交并再次推送。这太麻烦了,应该有更好的方法,对吧?
最佳答案
您应该在主题分支(我们称之为topic
)上完成所有工作,而不是在主分支(我们称之为master
)上。如果您为分配的每个“任务”创建一个新分支,则该分支仅存在于您的本地存储库中。稍后您会将其推送到您的 fork 并发出 pull 请求,将 upstream/master
与 your_fork/topic
进行比较。
如果upstream
的所有者不 merge 您的更改,那么不会造成真正的伤害; upstream
没有分支,也没有提交这些更改。您只需在本地存储库上 checkout master
即可,然后在新的主题分支上重新开始。
当您的 pull 请求打开时,您可以继续将更改推送到分支上的分支,它将自动更新 pull 请求。这里的期望是您将解决阻止上游
所有者 merge 您的更改的任何问题。
如果您对跟踪上游分支的本地分支进行了更改,您有几个选择:
- 如果您想保留更改,请执行
gitbranch
在当前HEAD
上创建新的分支指针,然后只需git reset --hard上游/branch_name
。 - 如果您不想保留更改,只需
git reset --hard upload/branch_name
关于git - 更改代码时需要遵循的正确 GitHub 流程是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32448250/