web-dev-qa-db-ja.com

2番目の新しいレビューがある場合にGerritのレビューの問題を修正する方法

Gerritとそのプロセスの使い方をまだ学ぼうとしています。私が行った手順

  1. 最初のchange1をgerritにプッシュして、HEAD:refs/for/developにレビューします。
  2. 同じブランチで他の何かに取り組み、change2を押してgerritに移動し、HEAD:refs/for/developにレビューします。

両方のコミットにgerritChange-ID行があります

だから今私はchange1の問題に対処したいので

git checkout -b change1 <change 1's commit id>

変更を加えてコミットしました(コミットメッセージにChange-IDを追加します)

git add .
git commit

今私がするとき

git Push Origin HEAD:refs/for/develop

私は得る

 ! [remote rejected] HEAD -> refs/for/develop (squash commits first)
error: failed to Push some refs to 'ssh://[email protected]:29418/CommunicationsLibrary'

積み重ねられたレビューの問題を修正し、さらに別のレビューを作成せずにgerritに投稿するにはどうすればよいですか?

14
Adrian Cornish

Gerritに依存レビューがある場合(つまり、同時にレビューされている以前の変更に依存するレビューの1つの変更)、以前の変更に変更を加える必要がある場合は、両方の変更を効果的に再送信する必要があります( 2番目の変更は、別の「親」コミットに依存するようになります)

したがって、次のように、メインの開発ブランチから離れた1つのブランチに2つのコミットがあるという状況になります。

o master
\
 o Commit A (in review, requires change)
 o Commit B (in review, no changes required)

この状況で私が一般的に行うことは、3番目のコミットでコミットAに要求された変更を行うことです。コミットグラフは次のようになります。

o master
\
 o Commit A (in review, requires change)
 o Commit B (in review, no changes required)
 o Commit C (modifications to Commit A)

今私がやります git rebase -i masterそしてコミットCをコミットAの後、コミットBの前に並べ替えてから、コミットAに押しつぶします。コミットグラフは次のようになります。

o master
\ 
 o Commit A' (Commit A, incorporating the changes from Commit C)
 o Commit B' (the same changes made in Commit B, but applied to Commit A' instead of A)

最後に、 git review(またはgerritへの変更を送信するために使用するコマンド)を使用して、両方のコミットをGerritに再送信します。

このような複雑さのために、ほとんどの人は、依存する変更がレビューされているこのような状況に対処する必要があるのではなく、Gerritに送信する前に、個別のブランチでそれぞれの個別の変更に取り組み、単一のコミットに押しつぶすことを強くお勧めします同時に。

17
Trevor Powell

あなたの問題は、1番目のコミットの修正に2番目のコミットが依存関係として含まれているという事実に関連していると思います。これは私が個人的に行うことですが、もっと良い方法があるかもしれません。コミットの方法をリベースしたいので、最後の3を処理しているように見えます。したがって、「git rebase -iHEAD〜3」を実行します。これにより、順序を切り替えるか、それらを相互にマージすることで、最後の3つのコミットをリベースできます。コミットが最も古いものから順にリストされていることに注意してください。次に例を示します。

gitログは次のとおりです。

コミット情報:....。

メッセージ:foo2

コミット情報:....。

メッセージ:bar1

コミット情報:....。

メッセージ:foo1

上記のコマンドを実行すると、エディターに次のメッセージが表示されます。

foo1を選択します。

bar1を選択します。

foo2を選択します。

(これは、2番目のfooの変更で、bar1が変更したファイルが変更されなかったと想定しています。これは機能しない可能性があるためです。変更した場合は、とにかくコミットを修正する必要があります。)次に、リストを次のように変更します。

foo1を選ぶ

修正foo2

ピックバー1

その後、foo1とfoo2が1つのコミットに押しつぶされ、bar1が次のコミットになります。次に、「git reset --soft HEAD〜1」を実行して最新のコミットをリセットし、続いて「git commit --amend」を実行して、最初のレビューのコミットメッセージを変更し、change-idを含めるようにします。 。次に、プッシュを試してください。その後、新しいパッチを設定する必要があります。2番目に変更されたすべてのファイルが変更され、作業ディレクトリに残ります。

2
xshoppyx

状況は@Trevorが説明したのとまったく同じです。 rebase -iは、この状態にあるときに行うのに適した方法です。

個人的には、このコマンドも使用しますが、少し異なります。

1。 --fixupと--autosquashを使用します

2つのコミットがあります:

old commit
new commit

古いコミットを変更したいときは、

 git commit --fixup <old_commit_id>

次に、オートスカッシュでリベースします。

git rebase -i --autosquash <commit_id_before_old_commit>

私のコメントが不明な場合は、次のURLで詳細を確認できます: https://fle.github.io/git-tip-keep-your-branch-clean-with-fixup-and-autosquash.html

[〜#〜]または[〜#〜]

2。 Gerritを活用する

2つの変更をコミットすると、GUIで2つのopen-reviewsの変更が行われます。

次に、「古い変更」に移動し、ダウンロード->この変更をチェックアウトします。実際にチェックアウトした後、この変更のブランチに移動します。次に、コードを修正し、修正し、リベースし、プッシュします...いつものように。

0
WUJ

git commit --amend then gitreview

0
CheStar

コール

commit --ammend

代わりに2回目の変更

0
Haoyi Mike