teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

回答の訂正を行う。

2020/02/17 06:18

投稿

manzyun
manzyun

スコア2244

answer CHANGED
@@ -1,3 +1,70 @@
1
+ # 2020-02-17 訂正
2
+
3
+ この回答の通知が来てたので自分の回答を読み直したのですが、
4
+ 「この時の俺、完全に誤解してやがる……」
5
+ と思ったので、5年ぶりに追記を。
6
+
7
+ >> gitではpullした時もリモートからpullした場合もマージコミットが出来るということなのでしょうか?
8
+
9
+ > リモートからのプル操作を行ったということであれば、おそらくそのはずです。
10
+
11
+ 質問文章を改めて読み直すと、主語・述語がgitで行われる操作と比べると、私も大分誤解があった印象がありましたので補足します。
12
+
13
+ > マージコミットが出来る
14
+
15
+ この辺りは[KiyoshiMotoki さんの回答内容](https://teratail.com/questions/47059#reply-75653) の説明の通りです。
16
+
17
+ ですが、これをもう少し紐解くのと、自分の前回の回答内容の訂正のために、次は順を追って解説していこうと思います。
18
+
19
+ >> これは小野寺さんがremote/masterをmasterへマージコミットした履歴がサーバへpushされたということですか?
20
+
21
+ > これはちょっと違うと思います。
22
+ > あくまで小野寺さんがremote/masterでマージ操作をした履歴が記録されているものと思われます。
23
+
24
+ 自分の事ですが、この回答は大分間違っておりますね……orz
25
+ むしろ、 redhad98 さんの認識で間違いないです。
26
+
27
+ 行った操作を見直しましょう。
28
+
29
+ > やった操作なのですか
30
+
31
+ > 1. 菊池さんがサーバへpush
32
+ > 2. 小野寺さんがファイルをコミット
33
+ > 3. 小野寺さんがプルを実行
34
+ > 4. 小野寺さんがサーバへpush
35
+
36
+ ということですので、一つずつgitでどんなことが行われたか、紐解いていきましょう。
37
+
38
+ (1.) の時点では、菊池さんの `master` ブランチの **今までのコミット内容** が `remote/master` に `push` されたと思います。この時点では `remote/master` の内容は、菊池さんの今までのコミット内容と同一です。
39
+
40
+ この時、(2.) の時点では小野寺さんのローカルリポジトリの `master` ブランチは、菊池さんが `push` した `master` ブランチの内容、つまり `remote/master` ブランチの内容は全く知りません。
41
+
42
+ (3.)がミソですね。
43
+ ここで小野寺さんが `pull` を行ったことで、 `remote/master` の内容、すなわち菊池さんの今までのコミットの内容が小野寺さんのローカルリポジトリの `master` ブランチに取り込もうとします。
44
+
45
+ しかし、菊池さんの行った変更履歴と小野寺さんが行った変更履歴は、同じ始点から始まっているものの、別の履歴を辿っております。
46
+
47
+ ここでgitプログラムそのものが気を利かせ、マージを行います(おそらく、小野寺さんが `pull` を行い、 `remote/master` の情報を取得し終わった後に、マージコミットの内容がgitで指定されたテキストエディタで開かれてたかもしれません)。
48
+
49
+ そして、 `remote/master` に書かれていた履歴の変更内容と小野寺さんの `master` ブランチの履歴の変更内容を集約したマージコミットが、小野寺さんの `master` ブランチに付け加えられます。
50
+
51
+ そして(4.)。ここで小野寺さんが `remote/master` に `push` しましたので、 `remote/master` に記録されている **今までのコミット内容** は、
52
+ 「菊池さんの今までのコミット内容が含まれている」
53
+ 履歴をたどっているので、無事 `push` が成功したものと思われます。
54
+
55
+ ---
56
+
57
+ 今回のケースでは無事にコミットできましたが、やはり個人的には不要なコンフリクト(変更内容の衝突)の発生とその解消に使う時間と労力を減らすためにも、
58
+ 「変更内容に対して1つはブランチを切る」
59
+ 運用をお勧めします(5年も経っているのですでにそのように運用されているとは存じ上げますが ^^;)。
60
+
61
+ ## 他に考えられるマージコミット生成タイミング
62
+
63
+ GitHub, GitLab, GitBucket などの「ソースコードホスティングWebサービス」で、
64
+ プルリクエスト(マージリクエスト)を取り込む操作を行った際には、基本はリモートリポジトリ上でマージなどの変更が行われます(リクエストの取り込み方はリベースでの歴史改変に変更できたりもします(GitHub, GitBucketでは確認済み)。
65
+
66
+ # 以下2020-02-17 以前の回答内容(誤回答)
67
+
1
68
  > gitではpullした時もリモートからpullした場合もマージコミットが出来るということなのでしょうか?
2
69
 
3
70
  リモートからのプル操作を行ったということであれば、おそらくそのはずです。