0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的備忘録:git stash pop で競合が起きたときの具体的な対処方法についてまとめてみた

Last updated at Posted at 2025-02-26

はじめに

Git で git pull を実行した際に、ローカルの変更とリモートの変更が競合し、マージができないことがあります。

個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。

本記事では Makefile で発生した競合 を例に、競合解決の方法 を解説します。

書こうと思ったきっかけ

最近、チーム開発中に Makefile の競合 に遭遇しました。普段はスムーズに git pull できていたのに、ある日 stash pop をしたところ競合が発生し、手動での解決が必要になりました。

競合自体はよくあるものですが、解決の流れを整理しておくことで、今後同じ問題に直面したときにスムーズに対応できる と思い、記録として残すことにしました。

Git を使った開発では、複数のメンバーが同じファイルを編集することが頻繁にあります

そのため、競合が発生することは避けられません。しかし、適切な方法で解決すれば、スムーズに開発を進めることができます

本記事では、競合が発生した場合の具体的な対処方法 を詳しく説明します。

エラーの発生状況

 ~/Desktop/test/skill-typing-front  (git)-[develop]-  git stash pop
Auto-merging Makefile
CONFLICT (content): Merge conflict in Makefile
On branch develop
Your branch is up to date with 'origin/develop'.

Unmerged paths:
  (use "git restore --staged <file>..." to unstage)
  (use "git add <file>..." to mark resolution)
	both modified:   Makefile

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	skill-typing-front/public/mockServiceWorker.js

no changes added to commit (use "git add" and/or "git commit -a")

このエラーは、リモートリポジトリの Makefile とローカルの Makefile に競合があり、自動マージできなかったことを示しています。

競合が発生する原因としては、以下のようなケースが考えられます。

  • リモートリポジトリにある Makefile が更新されている間に、ローカルでも同じファイルを変更した。
  • 他の開発者が Makefile に変更を加え、それがリモートに反映された後にローカルで作業をしていた。
  • git stash pop を実行した際に、リモートの変更とローカルの変更が衝突した。

このような状況では、手動で修正を行い、競合を解決する必要があります。

実際の解決方法(私の環境)

競合を解決するためには、以下の手順を実行します。

  1. 競合の確認

    git status
    

    を実行し、競合しているファイル (Makefile) を特定します。

  2. 競合の修正
    Makefile を開き、競合マーカー (<<<<<<<, =======, >>>>>>>) を削除して、適切な形で統合します。

  3. 変更をステージング

    git add Makefile
    git commit -m "Resolve conflict in Makefile"
    

    競合を解決したら、変更をコミットして保存します。

  4. 不要な stash の削除
    競合が発生した場合、stash は削除されずに残っているので、不要なら以下を実行します。

    git stash drop
    
  5. 変更をリモートへプッシュ

    git push origin develop
    

競合を解決した後は、リモートリポジトリに変更を反映させましょう!

まとめ

競合解決は最初は難しく感じるかもしれませんが、慣れてくるとすぐに対応できるようになります。プロジェクトによっては、他のメンバーとのコミュニケーションをとりながら競合を解決することも大切です。

競合を未然に防ぐために、定期的に git pull してリモートの最新状態を取り込みながら作業を進めることをおすすめします。

また、機能ごとにブランチを分けて開発を進めることで、競合の発生を減らすことも可能です。Git を正しく活用し、スムーズなチーム開発を実現しましょう!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?