競合するGitリベースの最中に「彼ら」の変更を取得するにはどうすればよいですか?


349

競合するブランチがあり、branch2はbranch1から分岐しています。

リベースしてみましょうと言うbranch2現在では、branch1競合を解決しながら、私が取ることにしたいくつかの「自分」(すなわちの(すべてではない)branch1として-である)ファイルを。それ、どうやったら出来るの?

私は試した:

git checkout branch1:foo/bar.java
fatal: reference is not a tree: TS-modules-tmp:foo/bar.java

git checkout refs/heads/branch1:foo/bar.java
fatal: reference is not a tree: refs/heads/TS-modules-tmp:foo/bar.java

41
注:Branch2をBranch1にリベースしている場合、再生はBranch1に対して相対的に行われるため、「Theirs」は実際にはBranch2であり、「Ours」はBranch1です。 git.661346.n2.nabble.com/...
氏Fooz


1
これはちょうど私に約20時間の勤勉な仕事を要しました。私は正直に言って、「私たち」が常に作業コピーであると思っていました。
セオドアR.スミス

回答:


496

あなたが使いたい:

git checkout --ours foo/bar.java
git add foo/bar.java

あなたは枝リベースした場合feature_xに対してmaster(つまり、実行中のgit rebase masterブランチにいる間にfeature_x)、リベースの間oursを指しmastertheirsしますfeature_x

git-rebase docsで指摘されているように:

リベースマージは、作業ブランチからの各コミットをブランチの上に再生することで機能することに注意してください。このため、マージの競合が発生すると、<upstream>で始まる、これまでにリベースされたシリーズが、私たちのものとして報告された側であり、彼らのものは作業ブランチです。つまり、辺が入れ替わります。

詳細については、このスレッドをお読みください。


0

別のブランチから特定のファイルをプルしたい場合は、単に

git checkout branch1 -- filenamefoo.txt

これは、1つのブランチから現在のツリーにファイルのバージョンをプルします


35
それはないあなたが競合リベース状態でなり切り離さヘッドの時点で、その枝の先頭からファイルを引っ張るだろう、これはおそらく、リベースの途中で悪い考えになり
Clintm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.