brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
resolve-git-conflicts安全な回復戦略を用いてマージとrebaseのコンフリクトを解消します。 コンフリクトの原因特定、コンフリクトマーカーの読み方、解消戦略の選択、 操作の続行または安全な中止を網羅。git merge・rebase・cherry-pick・ stash popでコンフリクトが報告された場合、git pullで変更が競合した場合、 または失敗したマージやrebaseを安全に中止して再開する必要がある場合に使用。
Independent GitHub snapshot · Automated classification · Original documentation governs
マージとrebaseのコンフリクトを特定し、解消し、回復する。
git merge または git rebase でコンフリクトが報告されたときgit cherry-pick がクリーンに適用できないときgit pull で変更が競合したときgit stash pop が現在の作業ツリーとコンフリクトするときどの操作がコンフリクトを引き起こしたかを確認する:
# Check current status
git status
# Look for indicators:
# "You have unmerged paths" — merge conflict
# "rebase in progress" — rebase conflict
# "cherry-pick in progress" — cherry-pick conflict
ステータス出力にはコンフリクトが発生しているファイルと実行中の操作が示される。
期待結果: git status に「Unmerged paths」にリストされたファイルとアクティブな操作が表示される。
失敗時: git status がクリーンな作業ツリーを表示するがコンフリクトを期待していた場合、操作がすでに完了または中止されている可能性がある。git log で最近のアクティビティを確認する。
コンフリクトが発生している各ファイルを開き、コンフリクトマーカーを確認する:
<<<<<<< HEAD
// Your current branch's version
const result = calculateWeightedMean(data, weights);
=======
// Incoming branch's version
const result = computeWeightedAverage(data, weights);
>>>>>>> feature/rename-functions
<<<<<<< HEAD から ======= まで: 現在のブランチの内容(またはrebaseのベースとなるブランチ)======= から >>>>>>> まで: 取り込まれる変更(マージされるブランチまたは適用されるコミット)期待結果: コンフリクトが発生している各ファイルに <<<<<<<、=======、>>>>>>> マーカーを含むブロックが1つ以上存在する。
失敗時: マーカーが見つからないがファイルがコンフリクト状態として表示される場合、バイナリファイルまたは削除と変更の競合の可能性がある。git diff --name-only --diff-filter=U で完全なリストを確認する。
手動マージ(最も一般的): 両方の変更を論理的に組み合わせるようにファイルを編集し、すべてのコンフリクトマーカーを削除する。
oursを採用(現在のブランチのバージョンを保持):
# For a single file
git checkout --ours path/to/file.R
git add path/to/file.R
# For all conflicts
git checkout --ours .
git add -A
theirsを採用(取り込まれるブランチのバージョンを保持):
# For a single file
git checkout --theirs path/to/file.R
git add path/to/file.R
# For all conflicts
git checkout --theirs .
git add -A
期待結果: 解消後、ファイルにコンフリクトマーカーが残らず、正しくマージされたコンテンツが含まれる。
失敗時: 誤った側を選択した場合、マージベースからコンフリクトしているバージョンを再確認する。マージ中であれば git checkout -m path/to/file でコンフリクトマーカーを再作成して再試行できる。
コンフリクトが発生している各ファイルを編集した後:
# Stage the resolved file
git add path/to/resolved-file.R
# Check remaining conflicts
git status
「Unmerged paths」にリストされているすべてのファイルについて繰り返す。
期待結果: すべてのファイルが「Unmerged paths」から「Changes to be committed」に移動する。すべてのファイルにコンフリクトマーカーが残っていない。
失敗時: git add が失敗するかマーカーが残っている場合、ファイルを再度開き、<<<<<<<、=======、>>>>>>> のすべての行が削除されていることを確認する。
すべてのコンフリクトが解消されたら:
マージの場合:
git commit
# Git auto-populates the merge commit message
rebaseの場合:
git rebase --continue
# May encounter more conflicts on subsequent commits — repeat steps 2-4
cherry-pickの場合:
git cherry-pick --continue
stash popの場合:
# Stash pop conflicts don't need a continue — just commit or reset
git add .
git commit -m "Apply stashed changes with conflict resolution"
期待結果: 操作が完了する。git status がクリーンな作業ツリーを表示する(rebaseの場合は次のコミットへ進む)。
失敗時: 続行コマンドが失敗する場合、git status で未解消のファイルが残っていないか確認する。続行する前にすべてのコンフリクトを解消しなければならない。
解消が複雑すぎる場合や誤ったアプローチを選択した場合は、安全に中止する:
# Abort merge
git merge --abort
# Abort rebase
git rebase --abort
# Abort cherry-pick
git cherry-pick --abort
期待結果: リポジトリが操作開始前の状態に戻る。データの損失がない。
失敗時: 中止が失敗する場合(まれ)、git reflog で操作前のコミットを探し、git reset --hard <commit> で復元する。この操作は未コミットの変更が失われるため、慎重に使用すること。
操作完了後:
# Verify clean working tree
git status
# Check that the merge/rebase result is correct
git log --oneline -5
git diff HEAD~1
# Run tests to confirm nothing is broken
# (language-specific: devtools::test(), npm test, cargo test, etc.)
期待結果: 作業ツリーがクリーンで、マージ履歴が正確で、テストが通過している。
失敗時: 解消後にテストが失敗する場合、構文上のコンフリクトは解消されていても、マージによって論理的なエラーが混入した可能性がある。差分を注意深くレビューして修正する。
<<<<<<<、=======、>>>>>>>)が残っていないgit status がクリーンな作業ツリーを表示しているgit log のマージ/rebase履歴が正確である--ours または --theirs は相手側を完全に破棄する。一方のバージョンが完全に正しいと確信できる場合にのみ使用する。--amend を使用しない。代わりに git rebase --continue を使用する。git rebase --abort と git merge --abort はすべての解消作業を破棄する。最初からやり直す場合にのみ中止する。commit-changes - コンフリクト解消後のコミットmanage-git-branches - コンフリクトにつながるブランチワークフローconfigure-git-repository - リポジトリセットアップとマージ戦略