我可以将Git暂存区的更改发送到代码审查工具进行审查吗?

3
我了解到git有不同的文件状态:
1. 新建 2. 修改 3. 暂存 4. 已提交
经过大量查询,我发现如果我想将代码发送到任何工具进行代码审查,我必须在本地仓库中进行提交,并将其推送到设置为代码审查的某个中央仓库(例如Gerrit)。
现在,假设在开始代码审查流程之前文件处于状态A,然后它经历了10次重新设计,即10次修改,即10次提交到本地仓库,最终文件处于状态B,应该最终提交。
从状态A到B需要进行10次提交。
假设其中有4次提交是针对文件的同一部分进行的。
因此,当我将已审核和接受的文件的最终状态B推送到主中央存储库时,我将不得不进行10次提交,其中一些中间提交需要重新设计,即不需要的提交。
但我不想要那些不需要的提交。
我认为我感兴趣的是将最终状态B推送到仓库的方法/工具,只需要一次提交。评审人将进行审查。如果他拒绝并建议进行更改,则我会取消暂存以前的更改。应用建议的更改,暂存这些更改,再次进行审查。
因此,最后如果代码评审人员接受,我将使我的暂存更改为一个提交,并且只需要进行一次最终推送。

这有帮助吗?https://dev59.com/pG865IYBdhLWcg3wIa7M? - Christoph
3个回答

2
无法将未提交的更改推送到Git存储库中。 但是,您可以使用不同的分支来实现您想要的功能。 您可以在开发分支上工作,并进行尽可能多的提交。 您可以将它们推送到远程服务器上的某个开发分支。 审核者接受更改后,您可以将提交合并到主分支中。 如果需要,您可以使用git rebase将提交合并为一个单一的提交merge

1
git push origin stash@{0}^1:refs/heads/tmp/for-code-review

这将使您储藏的索引可供审核

  • 将“origin”替换为其他人可以访问的远程内容
  • 将“@{0}”替换为您想要审核的储藏编号
  • 如果您希望审核您储藏的文件系统更改,则删除“^1”部分。
  • 如果您希望同时审核您储藏的索引和文件系统,则先推送索引(带有^1),然后再推送非索引(不带^1)。

以下是为什么使用独立创建的分支更好的原因:
- 假设代码审查通过后,您可能会将更改合并到某个地方。但是您无法将暂存内容合并到任何地方。 - 父历史记录非常丑陋。您的两个暂存提交都共享相同的父提交。 "WIP" 在技术上是合并提交,但这并不真正反映正在发生的情况。 - 提交消息很糟糕。 - 使用分支,您可以根据代码审查的反馈实际更改代码 - 这就是进行代码审查的全部意义。您可以添加更多提交,删除提交,变基,压缩等。您无法使用暂存(或变基等)完成此操作。 - 对我来说,我觉得我不需要“说服”任何人使用分支,因为每个尝试像这样使用暂存(或其他方式)的人都会自己发现正确/更好/更容易的方法就是使用侧边分支进行工作/代码审查。即git branch bugfix/xyz; edit...; git push origin bugfix/xyz;

1
这是一种巧妙的推送存档的方法 - 但我强烈同意使用临时分支的建议。 :) - Edward Thomson

0

我相信大多数代码审查工具都会使用diff,因此只需使用'git diff'生成要审核的代码的适当差异即可。

至于将您的多个提交合并为一个,那么有不止一种方法:

  1. 您可能想在manpage上查看--squash选项以获取 git merge 。或阅读this SO文章。

  2. 或者,您可以在dev分支上本地完成所有要提交的内容,但是在合并到主干之前,请使用 git rebase 将它们压缩在一起。有关详细信息,请参见manpage或阅读this SO文章。


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