Git + Arc Diff & Repairing Diffs(一直在 [master] 工作!)

Git + Arc Diff & Repairing Diffs (Been working from [master]!)

更新的问题描述:提前致谢!

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 编辑),并修复修订。

我该输入什么来创建一个新分支以包含所有更改(即那些已经“arc diff”修订的),恢复 master 分支(据推测),然后重新-arc diff --update 我最近提交的最新版本? ...(/或解决我的问题的任何方法。)

如果您在开始进行更改之前创建一个新的工作分支,这通常会自动进行。但如果它没有(因为 arc 无法找出上游分支点),diff 的命令行参数允许您指定您的意图:

  • --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 是 diff ID)。在这里我称它们为 D1 和 D2,但是您将使用在您提交它们时 diffusion 分配给您的 diff 的实际标识符。

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