Git + Arc Diff&修复Diffs(从[master]工作!)

时间:2017-08-17 15:34:53

标签: git repository git-branch pull-request phabricator

更新的问题说明:提前致谢!

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}}我对最新提交的最新修订? ......(或者其他任何修复我的问题。)

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