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

サミュエル

私のgitワークフローには、1つのメインリポジトリと1つのブランチ、マスターがあります。全員がリモートマスターからプルし、全員がリモートマスターにプッシュします。フィーチャーを準備している間、自分のブランチで働きたいです。これまでのところ、私の歴史は次のようなものです。

git pull --rebase
git checkout -b new_feature
<make some commits>
git checkout master
git pull --rebase

今、私はブランチをマージしたいと思います、そしてこれが私が必要とするものです:

  1. ローカルマスターブランチにマージコミットがありません。
  2. new_featureブランチに対して行われたすべてのコミットは、マスターで行ったかのようにマスターにマージされました。
  3. マージされたすべてのコミットは、ローカルのリモートヘッドポインタの上のどこかにマージされます。

私の最大の関心事は、変更を安全にプッシュできるようにするために必要な場合の項目3です。マージされたコミットが頭の前のコミットと絡み合っている場合、プッシュの問題が発生します。関連する問題を参照してください:git:単一のコミットのプッシュ、リベースによる並べ替え、重複したコミット

私は以下を読みました:

そして、私はする必要があると思います:

git checkout master
git pull --rebase
git checkout new_feature
git rebase master
git checkout master
git rebase new_feature
git push

私の理解は

git checkout new_feature
git rebase master

new_featureは、新しい現在のヘッドから分岐したように見えます。本当?そしてそれ

git checkout master
git rebase new_feature

マスターの上にnew_featureを配置します。あれは正しいですか?もしそうなら、これは私の混乱の主なポイントです。「gitrebasemaster」がマスターコミットをnew_featureの下部に配置する場合、「git rebase new_feature」がnew_featureコミットをマスターの上部に配置するのはなぜですか。つまり、逆のことをしないのはなぜですか。

ショーン・ルッティン

回答

これが、必要なことを実行するために使用できるワークフローです。

git checkout master
git pull --rebase                             (1)
git checkout new_feature                      
<do a bunch of commits>
git rebase master                             (2)
git checkout master
git merge new_feature                         (3)
git branch -D new_feature                     (4)

説明

(1)git pull --rebase最初にフェッチしてorigin/masterから、そのmaster上にローカル再生しますサンプルログでは、ローカルコミットが「ローカルリモートHEADポインタ」の上にあることに注意してください。

> git log --oneline --all -10 --decorate

d34d34c (HEAD, master) Local commit message.
d3434r2 Local commit message.
d234d4c Local commit message.
er3ede3 (origin/master, origin/HEAD) Remote commit message.
sfe3fd3 Remote commit message.

これで、しばらくの間ブランチでcheckout作業できますnew_feature終わったら...

(2)git rebase masternew_feature上で再生さmasterます。繰り返しますが、ローカルコミットは「ローカルリモートHEADポインタ」の上に残ります。

> git log --oneline --all -10 --decorate

fc5773d (new_feature) Local new_feature commit.
9282838 Local new_feature commit.
d34d34c (HEAD, master) Local commit.
d3434r2 Local commit.
d234d4c Local commit.
er3ede3 (origin/master, origin/HEAD) Remote commit.
sfe3fd3 Remote commit.

rebaseコマンドは、ちょうど置くnew_feature先マスターの、およびそれらを揃えるために、あなたが実行する必要があります...

(3)git merge new_feature、これは早送りマージを実行します。さてHEADnew_featuremaster同じにすべてのポイントをコミットします。

> git log --oneline --all -10 --decorate

fc5773d (HEAD, new_feature, master) Local new_feature commit.
9282838 Local new_feature commit.
d34d34c Local commit.
d3434r2 Local commit.
d234d4c Local commit.
er3ede3 (origin/master, origin/HEAD) Remote commit.
sfe3fd3 Remote commit.

(4)その後、new_featureブランチを安全に削除できますプッシュする前の最終ログは次のようになります。

> git log --oneline --all -10 --decorate

fc5773d (HEAD, master) Local new_feature commit 2
9282838 Local new_feature commit.
d34d34c Local commit.
d3434r2 Local commit.
d234d4c Local commit.
er3ede3 (origin/master, origin/HEAD) Remote commit.
sfe3fd3 Remote commit.

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

gitは履歴からマージコミットを削除します

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

コミット履歴がないgitリポジトリを、履歴を保存したリポジトリにマージします

分類Dev

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

分類Dev

gitはブランチを上書きしますが、履歴は保持します

分類Dev

`reflog`は、作成、移動、操作、マージ、または削除されたブランチ名の履歴レコードを保持しますか?

分類Dev

フォルダからサブモジュールリポジトリを作成し、そのgitコミット履歴を保持します

分類Dev

マスターからブランチをリセットしますが、ブランチコミットは保持します

分類Dev

RStudioを介したGitコミットは、常にTFSでブランチを作成/マージします

分類Dev

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

分類Dev

Gitは私がいたブランチの履歴を取得します

分類Dev

Git:Squashは、グラフ構造を維持しながら履歴にコミットします

分類Dev

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

分類Dev

Gitリベースは現在のブランチをリモートの後ろに残します、よりクリーンなコミット履歴が必要です

分類Dev

Gitリベースは現在のブランチをリモートの後ろに残します、よりクリーンなコミット履歴が必要です

分類Dev

Gitは、開発ブランチの最後のコミットのみをマージします

分類Dev

Gitは、現在のブランチにマージされたコミットを参照します

分類Dev

git:特定のブランチをプルし、最新のツリーのみを保持します(履歴なし)

分類Dev

git:すべての履歴からファイルとディレクトリを削除しますが、(マスターブランチだけでなく)すべてのブランチを保持します

分類Dev

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

分類Dev

コミット履歴のないGitマージ機能ブランチ

分類Dev

GitHubは、スカッシュマージされたPRのコミット履歴を無期限に保持しますか?

Related 関連記事

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

    gitは履歴からマージコミットを削除します

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

    コミット履歴がないgitリポジトリを、履歴を保存したリポジトリにマージします

  11. 11

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

  12. 12

    gitはブランチを上書きしますが、履歴は保持します

  13. 13

    `reflog`は、作成、移動、操作、マージ、または削除されたブランチ名の履歴レコードを保持しますか?

  14. 14

    フォルダからサブモジュールリポジトリを作成し、そのgitコミット履歴を保持します

  15. 15

    マスターからブランチをリセットしますが、ブランチコミットは保持します

  16. 16

    RStudioを介したGitコミットは、常にTFSでブランチを作成/マージします

  17. 17

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

  18. 18

    Gitは私がいたブランチの履歴を取得します

  19. 19

    Git:Squashは、グラフ構造を維持しながら履歴にコミットします

  20. 20

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

  21. 21

    Gitリベースは現在のブランチをリモートの後ろに残します、よりクリーンなコミット履歴が必要です

  22. 22

    Gitリベースは現在のブランチをリモートの後ろに残します、よりクリーンなコミット履歴が必要です

  23. 23

    Gitは、開発ブランチの最後のコミットのみをマージします

  24. 24

    Gitは、現在のブランチにマージされたコミットを参照します

  25. 25

    git:特定のブランチをプルし、最新のツリーのみを保持します(履歴なし)

  26. 26

    git:すべての履歴からファイルとディレクトリを削除しますが、(マスターブランチだけでなく)すべてのブランチを保持します

  27. 27

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

  28. 28

    コミット履歴のないGitマージ機能ブランチ

  29. 29

    GitHubは、スカッシュマージされたPRのコミット履歴を無期限に保持しますか?

ホットタグ

アーカイブ