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について基本頻出系

Gitでよく使うコマンドのまとめなんぞを。 Contents1 リポジトリ作成&基本設定2 リポジトリ取り込み系3 インデックス登録→コミット→リモート登録→プッシュ4 SSH設定5 変更戻し …

no image

gitの作業ディレクトリ・インデックス・HEADに関して

gitを使い始めてしばらくたちますが、まだ明確なイメージがつかめていないです(汗) みようみまねでやっていて、ポイント、ポイントで困ったことは検索してなんとか対応してきましたが、体系的な理解ができてい …

no image

GitLabのWebhook

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

no image

追跡ブランチからローカルブランチを作る方法~ (svn→gitの移行など)

SVNで運用されていたプロジェクトをgitに移行する機会があったのでその時のメモなどを。 思ってたよりは楽だったかな・・・ Contents1 準備2 実際の移行(git svn clone)3 gi …

no image

git別リポジトリからの差分取りこみ、リモートの別ブランチ反映、強引なstash

gitについて最近覚えたことなど Contents1 別リポジトリからの差分取り込み2 別ブランチからファイルのみ取り込み3 追跡ブランチをローカルに取り込みたいとき4 強引なgit stash 別リ …

アーカイブ