3

git にはさまざまなファイル状態の概念があることを知りました: 1. 新規 2. 変更済み 3. ステージング済み 4. コミット済み

たくさん検索した結果、コード レビューのために任意のツールに送信したい場合は、ローカル リポジトリにコミットし、それをコード レビュー用の中央リポジトリ セットにプッシュする必要があることがわかりました (Gerrit などのコード レビュー ツールによって)。 .

ここで、ファイルがコード レビュー プロセスを開始する前に状態 A であり、さらに 10 回のレビューのやり直し、つまりさらに 10 回の変更、つまりローカル リポジトリへのさらに 10 回のコミットを経て、最終的にファイルが状態 B になり、最終的にコミットされるべきであるとします。

状態 A から B まで 10 件のコミットが行われました。

これらの 10 のうち、4 つのコミットがファイルの同じセクション/部分にあったと仮定します。

したがって、最後に、レビューされ承認されたファイルの最終状態 B をメインの中央リポジトリにプッシュするとき、10 個のコミットを作成する必要があります。そのうちのいくつかの中間コミットはやり直し、つまり不要なコミットです。

しかし、私はそれらの不要なコミットを望んでいません。

私が考えることができるのは、最終状態 B が 1 つのコミットだけでリポジトリにプッシュされることに興味があるということです。

そのため、git ステージングされた変更をレビューのために送信できるようなアプローチ/ツールを探しています。レビュアーがレビューします。彼が拒否していくつかの変更を提案した場合、私は以前の変更をアンステージします。提案された変更を適用し、それらの変更をステージングして、レビューのために再度送信します。

したがって、最終的にコードのレビューが承認されたら、ステージングされた変更を 1 回コミットし、1 回の最終プッシュのみが必要になります。

4

3 に答える 3

2

コミットされていない変更をgitリポジトリにプッシュすることはできません。ただし、さまざまなブランチを使用して、目的を達成することができます。開発ブランチで作業し、必要な数のコミットを行うことができます。それらをリモートサーバー上の特定の開発ブランチにプッシュできます。レビューアが変更を受け入れた後、コミットをメインブランチにマージできます。必要に応じて、git rebaseを使用して、コミットを1つの単一のコミットにマージできます。

于 2012-10-03T19:29:17.683 に答える
1
git push origin stash@{0}^1:refs/heads/tmp/for-code-review

これにより、隠しインデックスがレビュー可能になります

  • 「origin」を他の人がアクセスできるリモートに置き換えます
  • 「@{0}」を、確認したいスタッシュ番号に置き換えます
  • 隠しファイルシステムの変更を確認したい場合は、「^1」の部分を削除してください。
  • 隠しインデックスと隠しファイルシステムの両方を確認したい場合は、最初にインデックスをプッシュし (^1 を使用)、次に非インデックスをプッシュします (^1 を使用しません)。

一意に作成された別のブランチを使用するほうがよい理由は次のとおりです。

  • コード レビューに合格すれば、変更をどこかにマージすることになるでしょう。スタッシュを何かにマージすることはできません。
    • 親の歴史は醜いです。2 つの stash コミットは両方とも同じ親を共有しています。「WIP」は技術的にはマージ コミットですが、実際に何が起こっているかを示しているわけではありません。
    • コミットメッセージは悪いです。
  • ブランチを使用すると、コード レビューのフィードバックに従って、実際にコードを変更できます。これが、コード レビューの全体的なポイントです。コミットを追加したり、コミットを削除したり、リベース、スカッシュなどを行うことができます。スタッシュではそれを行うことはできません。(またはリベースなど)

私には、誰かに代わりにブランチを使用するように「納得させる」必要はないと思います。作業/コードレビューにはサイドブランチを使用してください。別名git branch bugfix/xyz; edit...; git push origin bugfix/xyz;

于 2016-06-24T13:42:56.710 に答える
0

ほとんどのコード レビュー ツールは diff を取ると思いますので、'git diff' を使用して、レビューするコードの適切な diff を生成してください。

複数のコミットを 1 つにマージする方法については、複数の方法があります。

  1. オプションのマンページを参照してください。または、このSO 記事をお読みください。--squashgit merge

  2. または、必要なすべてのコミットを dev ブランチでローカルに実行できますが、メインラインにマージする前に、 を使用git rebaseしてそれらをまとめてください。詳細については、マンページを参照するか、このSO 記事をお読みください。

于 2012-10-04T14:50:39.447 に答える