マージプロセスで作成されたコミットに関してgitマージがどのように機能するかを理解できません。私はpro gitとgit communityの書籍の関連するセクションを読んだが、まだ混乱している。gitはマージでどのようにコミットを処理しますか?
は、このシナリオを考えてみましょう:私は「起源」Gitのレポを持っている:
master
|
a0--a1--a2--a3
\
-b0--b1
|
branch2
私は地元のレポにこのレポのクローンを作成し、ローカルレポでのみ動作します。ブランチ2では、私は "git merge master"をやった。これでローカルリポジトリは次のようになります。
master/origin/master
|
a0--a1--a2--a3
\ \
-b0--b1-----merge
| |
origin/branch2 |
branch2
したがって、 "b1"コミット後に1つのコミット "merge"が作成されました。私は1つは、現在のヘッドの前にコミット行けばコミット予想通り、私は、B1を取得、また
> git log branch2 --graph --pretty=oneline --decorate
* a7b69fc6759e1dd5463bab379ce101a6ad026c7b (HEAD, branch2) Merge branch 'master' into branch2
|\
| * 482e4026f05e33395a9fc3c87f50a746f692406a (origin/master, origin/HEAD, master) a3
| * 8de57bdea2d316073af3b7055f8c28c56004ce94 a2
| * 1e991047996aad269f2c01b9a0b9a7d8293096a1 a1
* | 99955f66843df51fb9d40c7797156c32cad57415 (origin/branch2) b1
* | 30ca9b6363558322f2bb7810d75cda0d9c2ba3e0 b0
|/
* 76a7c6d0eb54a9580841115ff2c3429360ab2ac9 a0
:BRANCH2のための「gitのログは、」期待されるグラフを示しています。 (グラフのブランチ2ラインに従って1コミットに戻る)
> git log branch2~ --graph --pretty=oneline --decorate
* 99955f66843df51fb9d40c7797156c32cad57415 (origin/branch2) b1
* 30ca9b6363558322f2bb7810d75cda0d9c2ba3e0 b0
* 76a7c6d0eb54a9580841115ff2c3429360ab2ac9 a0
ここで私は混乱しています。私はまだ私の変更を原点にプッシュしていませんが、 "git status"を実行すると、ローカルブランチ2が起点/ブランチよりも先に4つ分だけコミットされます。私は、上記のグラフ/ダイアグラムで見られるように、マージが1つの新しい「マージ」コミットに終わったと思いましたか?なぜ4?
> git status
# On branch branch2
# Your branch is ahead of 'origin/branch2' by 4 commits.
#
nothing to commit (working directory clean)
また、BRANCH2に起源/ BRANCH2から「gitのログ」を行うと、4の代わりに私が予想1のコミットを示す(行くから「マージ」から「B1」)。
> git log origin/branch2..branch2 --graph --pretty=oneline --decorate
* a7b69fc6759e1dd5463bab379ce101a6ad026c7b (HEAD, branch2) Merge branch 'master' into branch2
* 482e4026f05e33395a9fc3c87f50a746f692406a (origin/master, origin/HEAD, master) a3
* 8de57bdea2d316073af3b7055f8c28c56004ce94 a2
* 1e991047996aad269f2c01b9a0b9a7d8293096a1 a1
私は4つのコミットは3マスターから(A1、A2、A3)マージがブランチ2にオーバーもたらすことになって、プラス「マージ」されていることをコミットしている理解しています。しかし、なぜグラフにそのように表示されませんか?もしそうであれば、それは次のようになります。
master/origin/master
|
a0--a1--a2--a3-----------
\ \
-b0--b1--a1'--a2'--a3'--merge
| |
origin/branch2 |
branch2
とBRANCH2〜代わりB1のA3' に私をもたらすだろう。
ご協力いただきありがとうございます。
a1、a2、a3とmergeはorigin/branch2の一部ではないため、4つのコミットが表示されます。 –
マージから単一のコミットとして変更したい場合は、 'git merge --squash'を使うことができます。 – hammar