質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

Q&A

解決済

1回答

273閲覧

gitのrebaseコマンドの挙動について

papi_tokei

総合スコア106

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

1グッド

1クリップ

投稿2017/08/31 07:14

編集2017/08/31 10:50

###前提・実現したいこと
gitのrebaseコマンドの挙動を実際に試していて,少し疑問に思ったので質問させていただきました・
前提条件を以下に記載いたします.

【時刻t1】
<リモート>
コミット1→コミット2

<ユーザーA>
コミット1→コミット2→コミット3A

<ユーザーB>
コミット1→コミット2→コミット3B

上記の状態からユーザーAがプッシュを行いました.
その際の上値を以下に示します.

【時刻t2】
<リモート>
コミット1→コミット2→コミット3A

<ユーザーA>
コミット1→コミット2→コミット3A

<ユーザーB>
コミット1→コミット2→コミット3B

この時刻t2の状態で,ユーザーBがプッシュしようとすると,競合が起きると思います.
そこで,ユーザーBが以下のコマンドを実行しました。
$ git rebase origin/master
$ git push origin master
$ git log

その際、ユーザーBのコミットログは以下になりました.

<ユーザーB>
コミット1→コミット2→コミット3A→コミット3B→マージコミット1→マージコミット2

###発生している問題・エラーメッセージ

一度しかコミットしていないのに,なぜかマージコミットが二つ作成されています.
この理由もよくわからないのですが,rebaseコマンドが普通の競合解決と同じような気がします.
なので,rebaseコマンドを使った場合のみに起こる状況とはなんでしょうか?

###解決したい疑問点
解決したい疑問点は以下の二点です.
・まず,一度しかコミットしていないのに,なぜかマージコミットが二つ作成された点.
・rebaseコマンドを実行して競合を解決した場合,他の競合解決と異なる点.

上記二点についてご教授していただければ幸いです.
よろしくお願いします.

###補足情報(言語/FW/ツール等のバージョンなど)
git version 2.11.0 (Apple Git-81)

manzyun👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pebble8888

2017/08/31 08:36

試してみましたが、再現しませんでした。マージコミット1とマージコミット2は作成されませんでした。
yumetodo

2017/08/31 09:47

どういうrebaseコマンドを打つと再現するのか補足してください
papi_tokei

2017/08/31 10:47 編集

情報が不足していて申し訳ありませんでした。 $git rebase origin/master コマンドを実行した後、手動で競合を解決し、 $git push origin masterを行いました。 その後、$git logをすると、マージコミットらしきものが2つ作成されていました。 コミット時のコメントが同じコミットが2つ作成されていたということです。
guest

回答1

0

ベストアンサー

再現できません。

https://bitbucket.org/yumetodo/teratails_90594

こちらでの再現手順は以下のとおりです

Step 1 on 環境a

bash

1$mkdir teratails_90594 2$cd teratails_90594/ 3$git init 4$echo "arikitari" > a.txt 5$git add . 6$git commit -m "init commit" 7$git remote add origin https://yumetodo@bitbucket.org/yumetodo/teratails_90594.git 8$git push -u origin master 9$echo "na" >> a.txt 10$git add . 11$git commit -m "second commit"

Step 2 on 環境b

cmd

1git clone https://yumetodo@bitbucket.org/yumetodo/teratails_90594.git 2cd teratails_90594 3echo "world!" >> a.txt 4git add . 5git config --local user.name committer_b 6git config --local user.email committer_b@example.com 7git commit -m "second commit "

Step 3 on 環境a

bash

1$git push

Step 4 on 環境b

cmd

1git fetch 2REM rejectされる 3git push 4git rebase origin/master 5REM コンフリクト解決 6notepad a.txt 7git add . 8git rebase --continue 9git push

投稿2017/08/31 11:12

yumetodo

総合スコア5850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papi_tokei

2017/09/01 06:57 編集

解答頂きありがとうございます。 私の方の理解が間違っていたようで、一から勉強していました。 まず、今回の環境ですが、git cehckout コミット番号 として、移動した状態で、 ファイルを編集し、無理やりプッシュしようとしました。 ただ、そのときはプッシュできなくて、手動で競合を解決し、プッシュした結果、マージコミットらしきものが2つ作成されました。 git checkout コミット番号とした場合、detach HEADの状態のようでして、 通常のmasterブランチではないということ知りませんでした。 その状態で、コミットしてプッシュしたところマージコミットが2つ作成されたようです。 ですが、上記の手順を実行してもマージコミットは2つ作成されませんでした。 色々と試行錯誤した結果、奇跡的にマージコミットが2つ作成されたようです。 今回rebaseコマンドの理解もあやふやで、rebaseは、コミットが必要ないということも知りませんでした。 なので、不確かな知識のもと適当にコマンドを実行した結果、質問のような状態になったのだと思われます。 お手数をおかけして申し訳ありませんでした。
yumetodo

2017/09/01 10:01

2つできたのは謎ですが、そういうことでしたか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問