私のgitワークフローには、1つのメインリポジトリと1つのブランチ、マスターがあります。全員がリモートマスターからプルし、全員がリモートマスターにプッシュします。フィーチャーを準備している間、自分のブランチで働きたいです。これまでのところ、私の歴史は次のようなものです。
git pull --rebase
git checkout -b new_feature
<make some commits>
git checkout master
git pull --rebase
今、私はブランチをマージしたいと思います、そしてこれが私が必要とするものです:
私の最大の関心事は、変更を安全にプッシュできるようにするために必要な場合の項目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 master
はnew_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
、これは早送りマージを実行します。さてHEAD
、new_feature
とmaster
同じにすべてのポイントをコミットします。
> 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]
コメントを追加