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

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

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

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

Q&A

解決済

1回答

1199閲覧

Git マージの仕方とPull Requestをし直す方法

yoshi751

総合スコア19

Git

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

0グッド

0クリップ

投稿2019/11/28 10:13

前提・実現したいこと

Gitでレビューでされた指摘を反映して修正し、Pull Requestをし直す方法

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

現在、エンジニアとしてインターンを行っている会社で、先輩の方に、自分の書いたコードをPull Requestしてレビューしてもらっています。
前回のレビューでokをもらったので、Pull Requestのブランチを、いつもはgithub上のマージボタンを押して行っていたのですが、コマンドでもマージする練習をしようと思いコマンドを使用して、masterブランチにgit mergeしました。

そして今日、新しく作ったブランチでPull Requestを作成して、レビューしてもらったところ
先輩から「レビューでされた指摘が反映されいません、修正後、Pull Requestをし直してください」と言われました。

gitのコミットログを見て見ると、
普通の場合 マージした後
Merge pull request #8 from アカウント名/ブランチ名
と表示されますが、 今回は表示されていませんでした。

リモートとローカルでは、Pull Request用のブランチで行ったコミットは反映されていますが、
Merge pull request #8 from アカウント名/ブランチ名というコミットログが表記されません。

これを反映させるにはどうすればいいのでしょうか?
また、新しくPull Requestを作り直す際に、
masterブランチと差分を取るために、現在Pull Requestをしているブランチからブランチを切って、その内容を引き継ぎ、masterブランチと差分をとってPull Requestをし直すという認識であっているのでしょうか?

試したこと

git push origin masterやgit pull origin masterなどのコマンド

補足情報

駆け出しエンジニアのため、gitへの理解が浅いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

gitのコミットログを見て見ると、

普通の場合 マージした後
Merge pull request #8 from アカウント名/ブランチ名
と表示されますが、 今回は表示されていませんでした。

それはGithub上でmerge commitを作ったときに自動で生成されるcommit messageであって、実のとことmerge commitとは2つの親を持つcommitのことでありメッセージはなんでもいいのです。

試しにごく小さなrepoを作って検証してみましょう。

$ mkdir 226145 $ cd 226145 $ git init Initialized empty Git repository in /home/yumetodo/226145/.git/ $ echo "aaa" > foo.txt $ git add . $ git commit -m "init commit" [master (root-commit) 41e0281] init commit 1 file changed, 1 insertion(+) create mode 100644 foo.txt $ git checkout -b pr Switched to a new branch 'pr' $ echo "bbb" >> foo.txt $ git add . $ git commit -m "bbb" [pr 9e8cb91] bbb 1 file changed, 1 insertion(+) $ git checkout master Switched to branch 'master' $ echo "ccc" >> foo.txt $ git add . $ git commit -m "ccc" [master 241309b] ccc 1 file changed, 1 insertion(+) $ git merge pr Auto-merging foo.txt CONFLICT (content): Merge conflict in foo.txt Automatic merge failed; fix conflicts and then commit the result. $ git status On branch master You have unmerged paths. (fix conflicts and run "git commit") (use "git merge --abort" to abort the merge) Unmerged paths: (use "git add <file>..." to mark resolution) both modified: foo.txt no changes added to commit (use "git add" and/or "git commit -a") $ vim foo.txt $ git add foo.txt $ git commit [master 47b4778] Merge branch 'pr' $ git log commit 47b47784bded011fd2fc995dfdf65938fd222ebd (HEAD -> master) Merge: 241309b 9e8cb91 Author: yumetodo <yume-wikijp@live.jp> Date: Thu Nov 28 21:09:59 2019 +0900 Merge branch 'pr' Conflicts: foo.txt commit 241309baec09724206792951ff1d39695bd6931e Author: yumetodo <yume-wikijp@live.jp> Date: Thu Nov 28 21:09:10 2019 +0900 ccc commit 9e8cb91bcf73065aab165148fb57c470f03d66e3 (pr) Author: yumetodo <yume-wikijp@live.jp> Date: Thu Nov 28 21:08:38 2019 +0900 bbb commit 41e02818637789a9b987efd232ce93f56c5aa348 Author: yumetodo <yume-wikijp@live.jp> Date: Thu Nov 28 21:07:57 2019 +0900 init commit

こんなふうにrepoを造ったとき、merge commitは47b47784bded011fd2fc995dfdf65938fd222ebdですよね。こいつの情報を見てみると

$ git show 47b47784bded011fd2fc995dfdf65938fd222ebd commit 47b47784bded011fd2fc995dfdf65938fd222ebd (HEAD -> master) Merge: 241309b 9e8cb91 Author: yumetodo <yume-wikijp@live.jp> Date: Thu Nov 28 21:09:59 2019 +0900 Merge branch 'pr' Conflicts: foo.txt diff --cc foo.txt index 959479a,dbee026..0012ca8 --- a/foo.txt +++ b/foo.txt @@@ -1,2 -1,2 +1,4 @@@ aaa +ccc + bbb ++

一方、merge commitではないcommitを適当に見てみましょう。

$ git show 241309baec09724206792951ff1d39695bd6931e commit 241309baec09724206792951ff1d39695bd6931e Author: yumetodo <yume-wikijp@live.jp> Date: Thu Nov 28 21:09:10 2019 +0900 ccc diff --git a/foo.txt b/foo.txt index 72943a1..959479a 100644 --- a/foo.txt +++ b/foo.txt @@ -1 +1,2 @@ aaa +ccc

merge commitのときのみ

Merge: 241309b 9e8cb91

というのが確認できましたね。一方でmerge commitのコミットメッセージは自由に設定できることも確認できたと思います。

もうすこし視覚的にわかりやすい確認方法も試してみましょう。

$ git log --oneline --graph --all --remotes * 47b4778 (HEAD -> master) Merge branch 'pr' |\ | * 9e8cb91 (pr) bbb * | 241309b ccc |/ * 41e0281 init commit

このようにtreeが分岐していることがわかると思います。余談ですが

alias glo='git log --oneline' alias glog='git log --oneline --graph' alias gloga='git log --oneline --graph --all' alias glogar='git log --oneline --graph --all --remotes'

のようなaliasを貼っておくと便利です(上記はbashのaliasの記法)


また、新しくPull Requestを作り直す際に、

masterブランチと差分を取るために、現在Pull Requestをしているブランチからブランチを切って、その内容を引き継ぎ、masterブランチと差分をとってPull Requestをし直すという認識であっているのでしょうか?

そんな必要はなくて、単に現在Pull Requestをしているブランチに新たにcommitしてpushすればいいです

投稿2019/11/28 12:07

編集2019/11/28 12:25
yumetodo

総合スコア5850

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

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

yoshi751

2019/12/01 07:54 編集

Yumetodoさん、コード付きのご丁寧な回答ありがとうございます! Git mergeについての理解が少し深まりました! まだ少し疑問が残るので質問させてください。本当に初歩的なことですみません。 $ git checkout -b sample Switched to a new branch 'sample' $ echo "sample">>sample.txt $ git add . $ git commit -m "sample.txt" [sample 76883f7] sample.txt 1 file changed, 1 insertion(+) create mode 100644 sample.txt $ git push origin sample $ git switch master Switched to branch 'master' $ git merge sample $ git log commit 76883f716a3ff205d7a4775fb14770a30a781768 (HEAD -> master, origin/sample, sample) Date: Fri Nov 29 00:32:19 2019 +0900 sample.txt 自分が行った流れを再現したところ、masterに移動してgit merge ブランチ名をして git push origin masterしたという流れでlogを 確認するとmergeされていませんでした。 この場合、この後どのようにすればmergeされるのでしょうか? そして、この場合、Yumetodoさんのおっしゃる通りプルリクエスト を作り直すのは、あまり適切ではないと思いますが、もし仮に作り直す場合は、現在プルリクエスト を出しているブランチから新しくブランチを作ってmasterブランチとの差分をとって反映させるということで大丈夫でしょうか?
yumetodo

2019/11/29 06:36

その場合はfast-foward mergeが行われたのでmerge commitが作られず、単にmasterとsampleが同じcommitを指すようになった感じですね。説明し忘れてましたがmergeするときに歴史が分岐していなければmerge commitはあってもなくてもいいのです。この辺は`--ff`/`--no-ff`/`--ff-only`をgit mergeにわたすことで調整できます。 https://git-scm.com/docs/git-merge#Documentation/git-merge.txt---ff
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問