[解決済み] [Solved] リモートの変更を破棄して、ファイルに "解決済み "のマークを付けるには?
質問
ローカルにあるファイルをリモートブランチからプルしたところ、コンフリクトが発生しました。 ローカルの変更を維持し、コンフリクトを引き起こしているリモートの変更を無視したいことは承知しています。事実上、"すべての競合を解決済みとしてマークし、ローカルを使用する"と言うために使用できるコマンドはありますか?
解決方法は?
git checkout
には
--ours
オプションで、ローカルにあるファイルのバージョンをチェックアウトすることができます (これとは対照的に
--theirs
これは、取り込んだバージョンです)。を渡すことができます。
.
を
git checkout
を使って、ツリー内のすべてをチェックアウトするように指示します。それから、コンフリクトを解決済みとしてマークする必要があります。
git add
そして、作業が完了したらコミットしてください。
git checkout --ours . # checkout our local version of all files
git add -u # mark all conflicted files as merged
git commit # commit the merge
注意
.
の中にある
git checkout
コマンドを使用します。これはとても重要で、見逃しがちです。
git checkout
ブランチを切り替えるモードと、インデックスから作業コピーにファイルをチェックアウトするモードです(別のリビジョンから先にインデックスに取り込むこともあります)。ファイル名を渡さなかった場合、ブランチの切り替えを試みますが(ブランチを渡さなかった場合は、現在のブランチを再度チェックアウトしようとします)、変更されたファイルがある場合は切り替えを行いません。ですから、既存のファイルを上書きするような挙動をさせたい場合は
.
から2番目の挙動を得るためには、ファイル名または
git checkout
.
また、ファイル名を渡すときは、オフセットを
--
というように
git checkout --ours -- <filename>
. もしこれを行わず、ファイル名がたまたまブランチやタグの名前と一致した場合、Git はファイル名をチェックアウトするのではなく、そのリビジョンをチェックアウトしたいのだと判断し、最初の形式の
checkout
コマンドを使用します。
コンフリクトと マージ はGitで動作します。他人のコードをマージするとき(これはプルのときにも起こります。プルは、基本的にフェッチの後にマージすることです)、いくつかの可能な状況があります。
最もシンプルなのは、同じリビジョンにいる場合です。この場合、あなたはすでに最新の状態であり、何も起こりません。
もう一つの可能性は、相手のリビジョンが単にあなたのリビジョンの子孫であることで、その場合、デフォルトで "fast-forward merge" が発生し、あなたの
HEAD
は相手のコミットに更新されるだけで、マージは行われません(本当にマージを記録したい場合は、これを無効にすることができます。
--no-ff
).
次に、実際に2つのリビジョンをマージする必要がある状況に入ります。この場合、2つの可能性があります。ひとつは、マージがきれいに行われる場合です。すべての変更が別のファイルにあるか、同じファイルにあるが十分に離れていて、両方の変更を問題なく適用できる場合です。デフォルトでは、クリーンなマージが行われると自動的にコミットされますが、これを無効にするには
--no-commit
事前に編集する必要がある場合(例えば、関数の名前を変更した場合など
foo
から
bar
を呼び出す新しいコードを追加し、他の誰かが
foo
を実行すると、きれいにマージされますが、壊れたツリーが生成されるので、壊れたコミットが発生しないようにするために、マージコミットの一部としてそれをクリーンアップしたい場合があります)。
最後の可能性は、実際にマージが行われ、コンフリクトが発生した場合です。この場合、Git は可能な限りのマージを行い、コンフリクトマーカー付きのファイル (
<<<<<<<
,
=======
および
>>>>>>>
) を作業コピーに追加します。インデックス(ステージング・エリアとも呼ばれます。
git add
マージする2つのブランチの祖先にあるファイルのオリジナルバージョン、マージするブランチの
HEAD
(マージした側) とリモートブランチのバージョンです。
競合を解決するには、作業コピーにあるファイルを編集し、競合マーカーを削除して、動作するようにコードを修正します。あるいは、マージの片方あるいはもう片方のバージョンをチェックアウトすることもできます。
git checkout --ours
または
git checkout --theirs
. ファイルを好きな状態にしたら、マージが終わってコミットできる状態になったことを示すために
git add
で、マージをコミットすることができます。
git commit
.
関連
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] Git で、ステージされていない変更を破棄するにはどうしたらいいですか?
-
[解決済み] リモート Git リポジトリの URI (URL) を変更するには?
-
[解決済み] Git でブランチからコミットを削除する
-
[解決済み] git rebase の取り消し
-
[解決済み] Git のリモートブランチを作成する方法を教えてください。
-
[解決済み] Gitブランチをmasterにマージする最も良い(そして最も安全な)方法は何ですか?
-
[解決済み] Gitでファイルの変更を追跡しない、無視する方法とは?
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ファイルのアンリンクに失敗しました。もう一度試してみるべきですか?
-
[解決済み】GitHubのメッセージの意味: メールのプライバシー制限のためプッシュが拒否されました。
-
[解決済み】GitHubで空のブランチを作成する
-
git commits with an error: 更新が拒否されました。現在のブランチの先端が、このブランチより後ろにあるためです。
-
git revert 複数コミット
-
git revert + git rebase 一度に複数のコミット_本然233的博客程式员息信网_git revert Multiple
-
[解決済み】Git Push Error: リポジトリデータベースにオブジェクトを追加する権限が不足しています。
-
[解決済み] ssh-keygen' は内部コマンドまたは外部コマンドとして認識されません。
-
[解決済み] Git作者不明
-
[解決済み] "ダウンストリーム "と "アップストリーム "の定義