2016-12-03 7 views
1

gitリポジトリをあるフォームから別のフォームに移行するためのボットを作成しようとしています。Gitチェリーピックの競合がチルダファイルを作成する

このプロセスでは、チェリーを実行してステージングブランチからマスターブランチへの変更を行うためにgit cherry-pick $commit_hash -X theirs --no-edit --keep-redundant-commitsを実行します。

マスターのHEADとチェリーピックされたコミットの両方が、同じファイルであるが異なる内容を追加しています。私はチェリーピックされたコミットを上書きすることを希望します。したがって、-X theirs

しかし、gitがpath/to/first_file~[commit hash]...[truncated commit message]という2番目のファイルを追加すると、競合が発生しています。どうすればこの問題を回避できますか?ここでの問題は-X theirsだけ既存のファイル内の競合をマージ影響を与えることである

$ git status       # copy the conflicted <file path> 
$ git checkout --theirs <file-path> # accept theirs changes 
$ git commit -am 'resolved conflicts' # fixed conflicts 

答えて

0

はこれを試してみてください。 競合はまたとして生じ得るマージ:追加/追加

  • :両側(HEAD、およびTO-摘みする/コミットマージ)同じファイルを追加しています。
  • 変更/削除:片側がファイルを変更し、反対側がファイルを完全に削除します。
  • 名前の変更/削除:片側がファイルの名前を変更し、反対側がファイルを完全に削除します。

あなたはこれらのうちの最初のものを手に入れていますが、3つすべてがGitを停止させ、問題を解決するための外部ヘルプが必要です。 GitはGitがこれを実行しませんpath/to/first_file~[commit hash]...[truncated commit message]

と呼ばれる第二のファイルではなく、様々な外部のヘルパーを追加すると

は...ツールが行うマージ。

いずれにしても、手動で競合を解決する必要があります(追加するファイルを選択するか、必要に応じて2つのファイルを混合する)。これを自動化するには、独自のマージツールを作成するためのコードを書く必要があります。


それが唯一の競合をマージ影響することを改めて強調した価値があります。たとえば、一方の側がcolorからcolourに変更され、もう一方の側がorangeからfruitに変更されても、変更が「あまりにも近すぎて」競合が発生しない場合は、アイテムを記述しているファイル果実の色。 (通常、このような変更はと同じ行に影響するため、競合するため、-X theirsは片側の変更のみを選択します)。

1

+0

"これはGitは行いませんが、さまざまな外部ヘルパーマージツールは"どのようなヘルパーですか?それらは?これは私の個人的なUbuntu 16.04インストールとHerokuの両方で発生します。私は外部ヘルパーがインストールされていることに気づいていません。私はこれが 'git merge'でも起こっていることに気付きました。 –

+0

外部ヘルパーの詳細なリンクがありますか?:) –

+0

私は他のツールを一切使っていませんが、自分の配布ツールがこれらのファイル名を使用しているかどうかを調べるためにGitソースを調べました。 Gitのデフォルトは、マージの衝突で停止するだけで、 'git mergetool'を実行してカスタムツールを実行します。さまざまな設定ファイルと '.gitattributes'を使ってカスタムマージ*ドライバ*を定義することもできます。 – torek

関連する問題