ブランチからコミットを選択し、後でブランチ全体をマージすると、git履歴はどうなりますか?

user2494770

そのため、branchAからの特定のコミットのみが必要な状況が発生しました。これは、そのブランチ内の他のコミットをマージする準備ができていないためです。したがって、commitXをbranchAからmasterにチェリーピックし、後でbranchAをmasterにマージすると(たとえば、間にいくつかのコミットがあります)、gitの履歴に関する限りcommitXはどうなりますか?マスターにすでに存在しているため無視されますか、それとも何らかの重複が発生しますか?

火曜日

このgit merge操作では、「マージパス」に沿った個々のコミットは、いわば見られません。代わりに、開始スナップショットと終了スナップショットのみを確認します。ただし、2つの終了スナップショット(および1つの開始)があることに注意してください

...--o--B--o--...--o--L
         \
          o--...--o--R

ここで、BはマージベースコミットでありLRはそれぞれ左(またはローカルまたは--ours)および右(または他の、リモート、または--theirs)コミットです。一方、各ラウンドoは、Gitが見さえしないコミットを表しています。1 Gitは、事実上、単純に次のことを行います。

git diff --find-renames B L    # figure out what we did
git diff --find-renames B R    # figure out what they did

どのようなあなたのためにこれが意味git cherry-pickする「私たちがやった」と「彼らがなかった」の一部含まれる可能性のあるISと同じに変更同じファイルを、それは問題ありません、ステップなぜならgit mergeこれら二つ取得した後に行いエン一斉差分を変更結合し、マージの左側と右側の両方に表示される変更のコピーを1つだけ取得します。

ただし、コミットをチェリーピックしてから、1つのパスに沿って再び元に戻すとします。例:

...--o--B--X'--!X'--L
         \
          X--o--R

X'チェックマークが付いている理由は、それがコミットのコピーであるためXです。コミットをチェリーピックすると、新しいコピーは異なるハッシュIDを取得します。)

ここXでは、ブランチ(グラフの下の行)にcommit inを書き込み、それをメイン行(上の行)にチェリーピックし、準備ができていないか壊れていることに気づき、元に戻し(追加!X')、作成しました。Lメインラインの最後のコミットマージすると、コピーがX入ってから再び出たという事実は見えません。GitはBvsL比較しX'--!X'シーケンスのすべてに兆候が見られませんしたがって、commitによって導入された変更のコピーを1つ取得しXます。

X終わるブランチでコミットの準備ができている場合R、これは正しいアクションです。

Xそれでもコミットが壊れている場合、これは間違ったアクションですが、適切な解決策はX、マージする前にブランチを元に戻すことです。


1を見つけることを除いてB、つまり、Gitは両方Lから開始しR、グラフを逆方向に処理してマージベースを見つける必要があります。これは、Gitが他の点では興味のないコミットノードのいくつかをトラバースする必要があることを意味します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

gitマージ後、ブランチのコミット履歴をgitロググラフに保持します

分類Dev

ブランチ履歴を保持しながら、以前にマージされたブランチからの過去のコミットを修正します

分類Dev

git:ブランチをマージしますが、コミット履歴は保持します

分類Dev

マージはブランチのコミット履歴を変更できますか?

分類Dev

ブランチ間のマージの競合を回避しながらコミット履歴を操作する

分類Dev

コミット履歴から孤立したブランチを削除します

分類Dev

選択したコミットをGitの1つのブランチから別のブランチにマージするためのより良い方法はどれですか

分類Dev

git履歴のブランチに関係なく、最新のコミットを確認するにはどうすればよいですか?

分類Dev

gitでは、ブランチ内の特定のコミットをロールバックし、マージした後でも親ブランチ内でロールバックしないようにするにはどうすればよいですか?

分類Dev

マスターブランチへのコミットの長い履歴をリベースするための高速な方法はありますか?

分類Dev

コマンド「gitreset--hard <commit>」は別のブランチのコミット履歴を削除しますか?

分類Dev

Git:新しいブランチで最初からやり直し、履歴からコミットを削除します

分類Dev

(--squashを使用するなど)単一のコミットのみをもたらすgitブランチをマージする方法はありますが、競合することなく将来のマージを許可しますか?

分類Dev

Git:あるブランチから別のブランチの履歴に既存のコミットを挿入します

分類Dev

リモートブランチからローカルの孤立したブランチへの完全なコミット履歴を取得します

分類Dev

Pycharmの単一ブランチのコミット履歴をどのように表示できますか?

分類Dev

作業を新しいブランチに移動し、すべてのコミット履歴を削除するにはどうすればよいですか?

分類Dev

Android Studio 3.3.4でGitとマージするために別のブランチを選択するとどうなりますか?

分類Dev

gitでマスターとマージした後、機能ブランチはどうなりますか

分類Dev

ブランチ全体なしで最後の2つのコミットのみをリベースするにはどうすればよいですか?

分類Dev

いくつかのブランチを持つgit履歴の特定のコミットを削除しますか?

分類Dev

これらのコミットをマスター ブランチから独自のブランチにプルして、後でマージできるようにするにはどうすればよいですか?

分類Dev

ブランチの最後のコミットを元に戻し、他のブランチとマージして、コミットを再度追加するにはどうすればよいですか?

分類Dev

ブランチ履歴を完全に保持しながら、ブランチ状態をマスターにリセットするにはどうすればよいですか?

分類Dev

孤立した履歴に追加せずに、メインブランチから孤立したブランチへの変更をgitマージする方法は?

分類Dev

ブランチに加えられた変更を見つけるために、別のブランチにマージされた特定のgitブランチの最後のコミットをどのように伝えるのですか?

分類Dev

Gerrit IDを保持しながら、コミットをマスターからブランチに移動するにはどうすればよいですか?

分類Dev

ブランチを保持しながら、特定のコミットポイントでgitリポジトリを最近のコミットと古いコミットに分割するにはどうすればよいですか?

分類Dev

コミットを保持しながら、残りの履歴を集約しながら、ブランチを別のリポジトリに移動します

Related 関連記事

  1. 1

    gitマージ後、ブランチのコミット履歴をgitロググラフに保持します

  2. 2

    ブランチ履歴を保持しながら、以前にマージされたブランチからの過去のコミットを修正します

  3. 3

    git:ブランチをマージしますが、コミット履歴は保持します

  4. 4

    マージはブランチのコミット履歴を変更できますか?

  5. 5

    ブランチ間のマージの競合を回避しながらコミット履歴を操作する

  6. 6

    コミット履歴から孤立したブランチを削除します

  7. 7

    選択したコミットをGitの1つのブランチから別のブランチにマージするためのより良い方法はどれですか

  8. 8

    git履歴のブランチに関係なく、最新のコミットを確認するにはどうすればよいですか?

  9. 9

    gitでは、ブランチ内の特定のコミットをロールバックし、マージした後でも親ブランチ内でロールバックしないようにするにはどうすればよいですか?

  10. 10

    マスターブランチへのコミットの長い履歴をリベースするための高速な方法はありますか?

  11. 11

    コマンド「gitreset--hard <commit>」は別のブランチのコミット履歴を削除しますか?

  12. 12

    Git:新しいブランチで最初からやり直し、履歴からコミットを削除します

  13. 13

    (--squashを使用するなど)単一のコミットのみをもたらすgitブランチをマージする方法はありますが、競合することなく将来のマージを許可しますか?

  14. 14

    Git:あるブランチから別のブランチの履歴に既存のコミットを挿入します

  15. 15

    リモートブランチからローカルの孤立したブランチへの完全なコミット履歴を取得します

  16. 16

    Pycharmの単一ブランチのコミット履歴をどのように表示できますか?

  17. 17

    作業を新しいブランチに移動し、すべてのコミット履歴を削除するにはどうすればよいですか?

  18. 18

    Android Studio 3.3.4でGitとマージするために別のブランチを選択するとどうなりますか?

  19. 19

    gitでマスターとマージした後、機能ブランチはどうなりますか

  20. 20

    ブランチ全体なしで最後の2つのコミットのみをリベースするにはどうすればよいですか?

  21. 21

    いくつかのブランチを持つgit履歴の特定のコミットを削除しますか?

  22. 22

    これらのコミットをマスター ブランチから独自のブランチにプルして、後でマージできるようにするにはどうすればよいですか?

  23. 23

    ブランチの最後のコミットを元に戻し、他のブランチとマージして、コミットを再度追加するにはどうすればよいですか?

  24. 24

    ブランチ履歴を完全に保持しながら、ブランチ状態をマスターにリセットするにはどうすればよいですか?

  25. 25

    孤立した履歴に追加せずに、メインブランチから孤立したブランチへの変更をgitマージする方法は?

  26. 26

    ブランチに加えられた変更を見つけるために、別のブランチにマージされた特定のgitブランチの最後のコミットをどのように伝えるのですか?

  27. 27

    Gerrit IDを保持しながら、コミットをマスターからブランチに移動するにはどうすればよいですか?

  28. 28

    ブランチを保持しながら、特定のコミットポイントでgitリポジトリを最近のコミットと古いコミットに分割するにはどうすればよいですか?

  29. 29

    コミットを保持しながら、残りの履歴を集約しながら、ブランチを別のリポジトリに移動します

ホットタグ

アーカイブ