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

JSリンク集+git ブランチ指定 clone

現状の私の課題としてUIに対する意識が甘いということが上げられます。 大昔のサイトで使っているようなわかりにくいUIをそのまま使っているんですよね。 UIといってもいろいろな要素が必要となってきますが …

no image

Git→Jenkinsの連携

気がついたら投稿数が50超えてましたね。 ガチンコ塾とあわせて更新してますが、2ヶ月ちょいなので結構いいペースで更新しているかと思います。 大切なのはこれを継続できるかですね。ただ、ガチンコ塾に比べる …

no image

gitの紹介と基本的な使用法について

Contents1 旧来のソース管理方法2 バージョン管理ツール2.1 バージョン管理とは?2.2 有名なバージョン管理ソフト3 Gitの基本的な使用法3.1 初期化(git init)3.2 基本的 …

no image

gitのfetch/merge/rebaseについて

git使って結構立ってるんですがいまだに仕組みがややこしく結構難しいなあと感じています。 基本的な使い方は以前紹介した「gitの紹介と基本的な使用法について」でいいと思います。 開発をやっていますと一 …

no image

git stash ~一時的な内容の保存~

gitでコミットせずに、作業を保存したいときがあるとおもいます。 例えばあるブランチで作業していて、実は今の作業内容が別のブランチでの反映が必要になったときなどです。 gitはブランチの切り替え(gi …