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
更新的问题描述:提前致谢!
在 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