skillup

技術ブログ

Git

gitのfetch/merge/rebaseについて その2

投稿日:

以前、gitのfetch/mergeについての記事を書きましたが、理論的なことは書いてあっても実際に処理の流れをかいていなかったので、今回はそのことについてメモリます。

競合が起きるとき

gitでは一般的に

  1. (fetch and merge ) or pull
  2. 何らかの改修
  3. add & commit
  4. push

という流れをとりますが、下記のようなケースでは競合が発生します。

Step1 山田さんがAをコミット→プッシュ
Step2 鈴木さんがプル後、Bをコミット→プッシュ
Step3 山田さんはBをプル
Step4 鈴木さんはD、Eをコミット→プッシュ
Step5 山田さんはプルせずにCをコミット

図で書きますと以下のような状態です。

山田さん
A→B→C

鈴木さん
A→B→D→E

リモート
A→B→D→E

この状態でmergeをしますが、同一ファイルに差分がある場合、自動でマージができず下記のようなメッセージが出力されます。こういったファイルの状態ことをコンフリクトが起きているといいます。

コンフリクトの解決

このような場合、自動でmergeが働かないため、エディタでファイルを開き、下記のような競合を解決する必行があります。

vim file3

これはローカルのコミットが上段でfetchで取り込んだリモートのコミットが下段という意味です。

これらを取り除き、下記のようにします。(通常はどちらかに合わせることが一般的でしょう。)

 

このあとgit add & git commit と入力するとこの時点で競合を解消したというメッセージがすでにできています。

以前はNetbeansでやっていたので、この処理をしっかり意識せずやっており、気づいたら解消されていたみたいなケースがあったので気を付けたいところですね。

参考

gitのfetchに関して

gitのfetch/merge/rebaseについて

-Git
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

Gitでのbranch 新ブランチの作成&リモート反映&別環境反映

gitを使っているとわけのわからないことは多いのですが(爆)、その中の1つがbranch(ブランチ)でしょう。 これも説明をきいてもわからないのですが、自分でそのケースを学習してみればすぐにわかると思 …

no image

git flowについて

最近、現場で少し使うようになったgit flowに関して。 gitでbranchを切って開発をする場合、 git branch ブランチ名でブランチ作る なんらかの開発 開発が終わったらgit mer …

no image

GitLabのWebhook

前回の記事でGitLabのCI/CDを特集しましたが、実は今回やりたかったのはそこまで大掛かりなCIではなく、プッシュ時にオートマージ、オートデプロイなどでしたので、もっと簡単な仕組みでできます。 例 …

no image

GitLabのCI/CD

GitLabをGitHubがわりに使っているプロジェクトがあったのですが色々調べているうちにCI/CD的な使い方ができるといことで調査することに。 jenkinsでやったようなCI/CDができます。お …

no image

ファイルを戻したい時のGitコマンド(主にgit resetの用法)

使用ケースでGitコマンドを復習してみようかなと思いました。 主にgit resetの用法整理ですが・・・ Contents1 ローカルを間違ってaddしてしまい、インデックスへの変更を取り除きたい2 …

アーカイブ