Git + Arc Diff & 修补差异 (已从[master]工作!)

3
问题描述已更新: 提前感谢!
master 分支中,我对一个文件进行了更改并创建了一个待审核的差异。然后,我继续处理另一个用户故事,仍然在 master 分支上工作,并再次为审核创建了一个差异。两个用户故事,两个不同的差异准备好了进行审核。目前为止还不错。
[ 我理解通过 arc diff 创建待审核的 differential 就像创建 pull request。]
这里出现了问题……然后我重新处理了第一个用户故事,做了进一步的更改(仍然在 master 分支上工作),并继续运行了 arc diff <commit_hash>~ --update <diff_id>。差异现在显示最初创建的差异与其更新之间的更改,而不是总体更改!
……
有人告诉我在进行更改之前应该创建新分支。然后,所有修订的 arc --update 都会产生总体差异(而不是最后两个更新之间的差异)。
我也被告知可以继续创建新分支以包含所有我已经进行过 arc diff 的更改,并修复修订版本。
我该输入什么命令来创建一个新的分支,以包含所有更改(即已经进行了 arc diff 的更改),恢复 master 分支(据说),并使用最新提交的代码重新运行 arc diff --update 来更新修订版本? (/ 或任何可以解决我的问题的方法。)
1个回答

3
如果您在开始更改之前创建一个新的工作分支,这通常会自动完成。但是,在某些情况下(因为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是差异ID)的分支。这里我称它们为D1和D2,但您将使用提交时Diffusion分配给您的实际标识符。
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

一旦您确认所有内容已经安全地保存在Differential中(或者您可能想等到arc land两个补丁都完成后再进行确认),您可以删除用作备份的current_wip分支。

git branch -D current_wip

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接