はじめに、私は git を初めて使用しますが、ドキュメントや、 thisやthisなどのトピックに関する同様の問題を食い尽くしています(この後者の質問については、記事の後半で参照します)。
概要:あるブランチから別のブランチへのコミットをチェリー ピッキングしていました。あるブランチでコミットを行った後、それらをマージしようとすると、競合が発生しました。何が起こっていると思うかについては、以下の私の回答を参照してください。
シナリオ: 2 つのファイルがあり、1 つは "master" ブランチにあり、もう 1 つは "secondary" ブランチにあります。"secondary" ブランチには、master に含めたくないファイルがいくつか含まれており、少数の人しか使用していませんが、"master" と "secondary" の両方にあるほとんどのファイルは一貫している必要があります (master のすべてはただし、セカンダリのすべてがマスターにあるわけではありません)。これを達成するために、「マスター」で行われた変更をコミットしgit checkout secondary
、「セカンダリ」ブランチをチェックアウトしてから実行していgit merge master
ます。残念なことに、私は一度対立を引き起こしました。そして今、私の脳は対立が何であるかを理解しようとして急いでいます.
試みられた解決策:最初は、私が持っていた「セカンダリ」と「マスター」の両方でファイルを変更したためだと思いました。これを解決するためgit cherry-pick [commit]
に、セカンダリ ブランチで行った変更をマスター ブランチにプルしていました。ただし、マスター ブランチをセカンダリ ブランチにマージすることはできませんでした。Git は、git add/rm
(おそらくgit add
またはgit rm
、理解するのに少し時間がかかりました) を使用して、必要なものをマークすることを提案しました。そこで、 git rm コマンドを使用して、「セカンダリ」のインデックスと作業ツリーのバージョンを削除しました。この後、「マスター」ブランチに戻り、マージしたいファイルを「セカンダリ」に再コミットし、「セカンダリ」に戻ってから、git merge master
再度実行しました。残念なことに、対立します。
質問:率直に言って、何が起こっているのかわかりません。git merge master
(セカンダリ ブランチで実行すると) git master commit で行われたすべての変更が取得され、それらの変更がセカンダリ ブランチに配置されると思いました。それが起こっているのなら、私は問題を理解していません。セカンダリからファイルを削除し、変更をマスターにコミットしました。なぜマージできないのですか?先に言及した後者の質問に対する解決策は、共通の祖先に何か他のものが含まれているためである可能性があることを示唆していますが、私はそれをgit cherry-pick [commit]
処理しただろうと思いました. 問題は、cherry-pick
が新しいマージ ベースを作成しないため、問題のファイルが の後は同じであったとしても、マージ ベースとはcherry-pick
異なる可能性があるということですか?
この質問の長さをお詫び申し上げます。理解しようと一生懸命努力しており、円を描いているように感じます。どんなアドバイスも素晴らしいでしょう。
編集:なぜgitがブランチを変更してこの問題を解決しようとしないのか理解できないので、私も混乱していると思います。今試しgit checkout secondary
てみると、おそらくcherry-pick
コミットがセカンダリに変更され、error: you need to resolve your current index first
. gitがこの動作を許可しない理由があるに違いないと思いますが、それが何であるかわかりません。