触ってないのにコンフリクト?ObsidianのGit同期で競合が起きる原因と解決法

その他

「2台同時に触っていないのに、なぜか競合している」
「日記ファイルが謎の記号だらけになり、同期が止まってしまった」

ObsidianをGitHub経由でPCとスマホに同期していて、こんな経験はありませんか?
実は私もそうでした。
これが起きたとき、正直かなり焦りました。

この記事は、Obsidian同期自動化ガイド に基づき、GitHub経由で同期を行っている環境でのトラブル対策です。

この記事では、その原因と直し方をまとめます。
同じ状況で詰まっている方の参考になれば幸いです。

以前のトラブル原因記事もご参考ください。


スポンサーリンク

コンフリクトとは何か

コンフリクト(競合)が起きると、ファイルにこんな記号が現れます。

<<<<<<< HEAD
- PCで書いた内容
=======
- スマホで書いた内容
>>>>>>> origin/main

これは「コンフリクトマーカー」です。
Gitが「2つの変更をどう合体すればいいかわからない。手動で直して」と伝えています。

記号の意味はシンプルです。

記号意味
<<<<<<< HEAD 〜 =======PC側の変更内容
======= 〜 >>>>>>> origin/mainGitHub側(スマホから送られた)の変更内容

このマーカーが残っている限り、Gitはファイルを「競合中」として扱い続けます。
具体的な直し方は後述します。


私の同期設定

原因を理解するために、まず自分の設定を整理しておきます。

スマホ(iPhone)の設定

  • Obsidianを開いたとき: GitHubから Pull(最新データを取得)
  • Obsidianを閉じたとき: GitHubへ Commit & Push(書いた内容を送信)
  • ※ iOSショートカット + Working Copy で自動化しています

PC(Windows)の設定

  • Obsidian Git プラグインで 1分ごとに自動で Pull & Push

普段はこれで快適に動いていました。
「両方開いてなければ大丈夫」くらいの感覚で使っていたのが、今回の罠でした。


原因は大きく分けて以下の2つ、「PC of 1分タイムラグ」 と 「スマホ of Push忘れ(アプリを閉じていない)」 です。

原因1:PCの「1分タイムラグ」によるすれ違い

「PCで書いた → すぐGitHubに届く」と思ってしまいますが、実際には自動同期が走るのは最大1分後です。
この1分のタイムラグの間にスマホを開いてしまうと、スマホ側は「PCの変更が入っていない古いデータ」を掴んでしまいます。

【すれ違いの流れ(パターンA:PCのタイムラグ)】

原因2:スマホの「Push忘れ(アプリを閉じていない)」

iPhone側の自動同期は「Obsidianアプリを閉じたとき」に動く設定にしています。
しかし、スマホでメモを書いた後、ホーム画面に戻らずにスリープさせたり、アプリを開きっぱなしで放置してしまうと、変更がGitHubに送信(Push)されません。
この「未送信」の状態のままPCで新しくメモを書いたり、今度スマホを開いたときに時間差で自動Pushが走ったりすると、履歴が衝突しておかしくなってしまいます。

【すれ違いの流れ(パターンB:スマホのPush忘れ)】


整理するとこうなります。

  • PCの自動同期が走る前の「1分間」にスマホで書き始める
  • スマホで書き終わった後、アプリを閉じずに放置してPushを忘れる

このどちらかが起きると、Gitから見て「2つの端末で、別々の古いデータをベースに同時に書き換えられた(すれ違い)」状態になり、競合が発生します。 タイムラグや送信漏れのせいで、Gitからすると「2か所で別の変更がされた」状態に見えてしまいます。


発生したときの直し方

STEP 1|マーカーを手動で取り除く

まず、ファイル内のコンフリクトマーカーを取り除きます。

⚠️ ここが落とし穴:マーカーを消すだけでは解消になりません。

実際、最初にこれをやらかしました。
「記号を消してきれいにしたのに、まだ競合中って出てる…?」という状態です。

なぜかというと、コンフリクトが起きた瞬間にGitは自動同期を止めます(ロック状態)。
ファイルを編集しただけでは、このロックは解除されません。
コミットして初めて、Gitに「解決した」と伝わります。

ステップやることGitの状態
① ファイル編集記号を取り除くまだロック中
② コミット解決をGitに宣言ロック解除
③ プッシュ内容を送信同期が再開する

マーカーの取り除き方はシンプルです。
日記の場合は両方とも自分の記録なので、記号だけを消して両方を残せばOKです。

Before(コンフリクト中)

>>>>>> HEAD
- PCで書いた内容
=======
- スマホで書いた内容
<<<<<< origin/main

After(記号を取り除いた後)

- PCで書いた内容
- スマホで書いた内容

コードのコンフリクトの場合は「どちらが正しいか」を判断して片方を残します。
日記はそういう判断が不要なので楽です。


STEP 2|コミット & プッシュ

マーカーを取り除いたら、次はコミットです。
ここで競合が正式に解消されます。

方法1:Obsidianから操作する(おすすめ)

1. Ctrl + P を押す
2. "Obsidian Git: Commit all changes" を選択・実行
   → ここでロックが解除される
3. "Obsidian Git: Push" を選択・実行
   → GitHubへ送信・同期が再開する

Obsidianが生成した競合レポートファイルも、コミット時に自動で削除されます。
操作はこれだけで完了です。

方法2:コマンドラインで操作する

ターミナルやPowerShellが使える方はこちらでも同じことができます。

# 解決済みとしてマーク
git add &lt;競合していたファイル名>

# コミット(ここでロックが解除される)
git commit -m "Merge conflict resolved"

# GitHubへ送信
git push

方法3:Working Copyでマージする(スマホ側)

PCを使わず、スマホ(Working Copyアプリ)の操作だけで履歴を合体させて解決する方法です。

  1. Working Copyアプリを開く
  2. 画面中央下の Synchronize をタップする
  3. Fetch をタップして最新の履歴(PC側の変更)を確認する
  4. Merge を選択して、スマホの変更とPCの変更を合体させる
  5. 通常通り Push を実行する

予防策

直し方を覚えたうえで、そもそも起こさない習慣も持っておきたいところです。

日常の習慣

スマホに切り替えるとき Obsidianを開いたあと、すぐ書き始めないことが大事です。
同期完了の通知が消えてから書き始めます。
開いた直後に書くと、まだ古いデータが使われている可能性があります。

スマホを使い終わったとき 必ず 「アプリを閉じる(ホーム画面に戻る)」 習慣をつけましょう。
iPhoneのショートカット同期は「アプリを閉じたこと」を検知してGitHubに変更を送ります。開きっぱなしで放置してしまうと、送信漏れになり、次にPCで開いたときに競合する原因になります。

PCを離れるとき 次にスマホで書く可能性があるなら、手動でPushしておきます。
1分の自動同期を待たずにGitHubを最新にできるので、スレ違いが起きなくなります。

1. Ctrl + P を押す
2. "Obsidian Git: Push" を選択・実行

この習慣を身につけてから、競合がほぼ起きなくなりました。

設定の見直し

Obsidian Gitの自動Push間隔を「1分」→「30秒」に短縮する方法もあります。
タイムラグが物理的に小さくなるので、すれ違いのリスクが減ります。
ただし、コミット履歴が増えます。
気になる方は許容できる範囲で調整してみてください。


💡 その他の同期エラー(SSHエラーなど)でお困りの場合

コンフリクト以外の同期エラー全般の対処法については、こちらの同期トラブル解決ガイド にまとめています。


まとめ

  • 原因は PCの1分タイムラグの間に、スマホが古いデータを掴んだこと
  • マーカーを消すだけではダメ。コミットまでが解消の手順
  • 予防は「切り替え前に同期完了を確認」か「手動Push」が一番効果的

自動化の落とし穴でしたが、仕組みがわかってしまえば対処は難しくないです。
同じ状況で困っている方の参考になれば幸いです。

コメント

タイトルとURLをコピーしました