更新的问题说明:提前致谢!
在master
分支机构中,我对文件进行了更改,并arc diff --create
编辑了要审核的差异。然后我处理了另一个用户故事,仍然在master
分支机构工作,并再次arc diff --create
编辑差异以供审核。两个用户故事,两个差异准备审查。好到目前为止。
[我了解通过differential
创建arc diff
进行审核,就像制作pull request
一样。 ]
以下是问题...然后我重新解决了第一个用户故事,进行了进一步的更改(仍在master
分支中工作,然后继续arc diff <commit_hash>~ --update <diff_id>
。差异现在显示更改在最初创建的差异和它的更新之间,而不是整体改变!
...
我被告知在改变之前我应该建立一个新的分支。然后,修订版的所有arc --update
将导致总体差异(不是最后两次更新之间的差异)。
我也被告知我仍然可以让新分支包含我的所有更改(我有arc diff
'ed),并修复修订。
我键入什么来创建一个新分支以包含所有更改(即那些已经'arc diff
'用于修订的更改),还原master
分支(据称)并重新{ {1}}我对最新提交的最新修订? ......(或者其他任何修复我的问题。)
答案 0 :(得分:3)
如果在开始进行更改之前创建新的工作分支,则通常会自动运行。但是在它没有的情况下(因为弧无法找出上游分支点),有一些命令行参数可以让你指定你的意图:
--update REVISIONID
- 更新特定修订例如,arc diff --update D1
要返回并修复您的树,首先要创建一个新分支,以保持当前正在进行的工作,以便您可以随时返回它:
git checkout -b current_wip
现在,删除本地主服务器,并重新检查上游服务器上的主服务器状态。这会在您进行任何更改之前将其带回,但由于您创建了current_wip分支,因此您不会丢失任何内容(即使您跳过创建该分支,您实际上也不会丢失提交,它们会由于没有附属于分支而变得难以找到)。当你arc land
更改时,拥有一个干净的主人也会避免一些警告。
git branch -D master
git checkout master
现在您可以重新创建两个原始补丁,但这次是在不同的分支上。 arc patch
可用于从Differential中提取补丁,并自动为您创建名称为arcpatch-D1
的分支(其中D1为差异ID)。在这里,我将它们称为D1和D2,但是在提交时,您将使用扩散分配给差异的实际标识符。
arc patch D1
git checkout master
arc patch D2
现在您只需要进行最后一次更改,然后将其应用于D1之上进行处理。
git log current_wip
记下提交ID的前几位数字。对于少于几千次提交的存储库,您可能只需要前5位数。即使像Linux内核这样的大型存储库通常也能在前7位数内唯一地识别提交。下面,我将其称为1234abc
,但您将使用实际的提交ID。
接下来,您将使用您制作的第一个补丁重新回到分支机构,然后选择那个提交。 Cherry-pick仅采用特定的提交,而不是合并,这将需要在两者之间丢失任何内容。采摘樱桃之后,如果你没有遇到冲突,你就可以更新差异了。
git checkout arcpatch-D1
git cherry-pick 1234abc
arc diff
如果您对所有内容都安全地处于差异状态(或者您希望等到arc land
两个补丁)感到高兴,则可以删除用作备份的current_wip
分支。
git branch -D current_wip