0

シナリオ:gitワークフローに従います:

マスターブランチ-個々の機能ブランチからリリース可能なコードがあります

to-be-QAdブランチ-QAによってまだテストされていない個々の機能ブランチからのコードがあります

  1. ブランチ機能を作成しました-マスターからのA
  2. いくつかの変更をコミットしました(コミット1
  3. さらにいくつかの変更を加えてコミットしました(コミット2
  4. マージされたブランチ機能-AからQAdへのブランチ
  5. この機能は、 QAdブランチで期待どおりに機能しないことに気づきました
  6. 機能-ブランチに切り替えてリセットしました-最後のコミットがコードを悪化させたため、前のコミット(コミット1 )にハード
  7. 変更を加えてコミットしました(コミット3
  8. 統合された機能-将来のQAdへのブランチ
  9. 正しいコード(commit-1の一部であった)を持つファイルが正しくマージされません。マージにより、ファイルはコミット2から保持されます。(ファイルは最後のコミットで変更されません。)

ここで何が間違っているのかわからない!私の限られたgitの知識によれば、それは非常に些細なことのようです。

私が根本的に間違ったことをしている場合、そのような場合の正しいアプローチは何ですか?すでに一度マージした場合は、機能ブランチで前のバージョンに戻って再度マージする必要があります。

4

3 に答える 3

1

git reset --hardHEADポインタをリセットするだけです。あなたはおそらくやりたいでしょうgit revert <commit-id>。これにより、コミットが効果的に元に戻され、履歴に記録されるため、元に戻すアクションがQAブランチにマージされます。

これはからgit help revertです:

1つ以上の既存のコミットが与えられた場合、関連するパッチによって導入された変更を元に戻し、それらを記録するいくつかの新しいコミットを記録します。これには、作業ツリーがクリーンである必要があります(HEADコミットからの変更はありません)。

注:git revertは、いくつかの新しいコミットを記録して、以前のコミットの効果を元に戻すために使用されます(多くの場合、障害のあるコミットのみ)。作業ディレクトリ内のコミットされていないすべての変更を破棄する場合は、git-reset(1)、特に--hardオプションが表示されます。..。

関連:Git Revert、Checkout、Resetの違いは何ですか?Gitリポジトリを以前のコミットに戻す方法は?

于 2012-04-13T01:33:11.133 に答える
0

機能Aを最初に持ってきたときからマージを元に戻さなかったため、QAdブランチにはcommit2やその他の誤ったファイルからの変更がまだ残っています

機能をマージする前に-修正を行った後、2回目に、最初のマージ前のコミットのIDであるto-be-QAdブランチでgitreset--hardを実行します。

編集!

これは、他の開発者が最初のマージ後に機能をQAdにすることをコミットした場合に問題を引き起こす可能性があります。これを行う場合は、バックアウトするコミットに注意してください。

于 2012-04-13T01:37:57.427 に答える
0

機能で「gitreset」を実行したとき-ブランチはcommit-1に戻り、commit-3を追加しました。しかし、将来のQAdブランチには、commit-1とcommit-2がまだあります。次に、feature-Aをto-be-QAdにマージすると、commit-1、comment-2、commit-3-mergedのようなものになります。したがって、commit-2からの何かが残っている可能性があります。いくつかの方法で問題を解決できます。

  1. 機能Aとto-be-QAdの両方で「gitreset」を実行し、commit-3をfeature-Aに追加し、to-be-QAdにマージします
  2. 機能Aで「gitrevert」を実行して、commit-2を元に戻すコミットを追加し、commit-3-を追加します。この後、機能-ブランチはcommit-1、commit-2、commit-2-のようになります。元に戻す、コミット-3。次に、commit-2-undoとcommit-3を取得するto-be-QAdにマージします
于 2012-04-13T05:20:51.157 に答える