开发人员A(我自己)有一个本地仓库和一个远程仓库,远程仓库是开发者B仓库的一个分支,本地仓库是远程仓库的克隆。 当Developer B要求我对程序代码进行更改时,Developer A执行RStudio中的更改(在本例中),Developer A转到SourceTree,打开本地仓库,提交程序更改,推送更改到我的远程仓库和上游仓库。一切都在同步,我们很高兴。
但是,如果开发人员B拒绝开发人员A的更改,那么我的本地和远程存储库现在与上游不同步,Git将不允许我推送任何更改。对于无知,我所做的是删除本地和远程repos,再次fork远程,将其克隆到本地,重做更改,在源树中提交并再次推送。这是太多的工作,应该有更好的方法,对吗?
答案 0 :(得分:2)
您应该在主题分支上进行所有工作(让我们称之为topic
),而不是在主分支上(让我们称之为master
)。如果为每个"任务创建一个新分支"您被分配后,此分支仅存在于您的本地仓库中。稍后您将把它推送到您的前叉并发出一个Pull Request,将upstream/master
与your_fork/topic
进行比较。
如果upstream
的所有者未合并您的更改,则不会造成任何真正的伤害; upstream
没有分支,也没有提交这些更改。您只需在本地仓库上签出master
,然后重新开始新的主题分支。
当您的Pull请求处于打开状态时,您可以继续将更改推送到fork上的分支,它将自动更新Pull Request。这里的期望是,您将解决阻止upstream
所有者合并您的更改的任何问题。
如果您对跟踪上游分支的本地分支进行了更改,则可以选择以下几种方法:
git branch
在当前HEAD
上创建新的分支指针,然后只需git reset --hard upstream/branch_name
。git reset --hard upstream/branch_name