2

これを明確に表現するのに苦労していますが、試してみます。

状況:

質問:


  • 小さな違いを維持することは気にしません。
  • 将来、自分のコードを簡単にプルできるようにしたい。
  • 履歴を失いたくない (鉱山またはアップストリーム)。
  • このソリューションによって、将来の開発で問題が発生することはありますか?

代替案:

  • もっと簡単な方法はありますか?
  • このブランチの名前を (どういうわけか) 変更して、新たに開始する必要がありますか?
    • (どういうわけか) 名前の変更をローカルで同期し、新しいマスターから作業しますか?
    • 問題が発生するため、master という名前のブランチの使用を忘れるべきですか?

問題の Github:

4

2 に答える 2

1

履歴を失いたくない場合の最も簡単な方法は、プル リクエストで作業するフィーチャー ブランチを常に作成することです。

あなたの場合(履歴を保持したい場合)、新しいブランチを作成します

git checkout master
git checkout -b my-old-feature

次に、マスターブランチを上流のマスターブランチの任意のポイントにリセットするだけです

git remote add upstream <upstream-repo-uri>
git fetch upstream
git checkout master
git reset --hard upstream/master

その後、クリーンな状態になり、マスター ブランチはまさにアップストリーム ブランチになります。将来的には、マスター ブランチをアップストリーム/マスター ブランチに常に従わせ、アップストリームの更新との衝突を防ぐために作成したフィーチャー ブランチに取り組んでください。

編集:
ちなみに、私は常にブランチにアップストリームと同じ名前を付けることを好みます。ただし、別のブランチ名でアップストリーム/マスターを追跡することもできます。例えば:

git pull upstream master:upstream-master

この助けを願っています!

于 2013-01-23T21:38:12.800 に答える
0

プル リクエストにない追加のコミットがフォークにあり、それらを新しいマスターに移行したいということですか?

を使用git-rebaseします。実際には、それが何をしているのかを知っている場合にのみリベースする必要があることに注意してください。

git rebase --onto upstream/master A B

ここで、Aはプル リクエストの最後のコミットでBあり、ローカル ブランチの名前 (おそらくmaster) である必要があります。

これにより、プル リクエストの後に来るすべてのコミットが繰り返され、アップストリームの新しいマスター上で一度に 1 つずつ「再生」されます。「リプレイ」とは、git が文字通り各コミットからパッチを生成し、それをコードに適用して、オリジナルと同じ日付/作成者/メッセージで新しいコミットを作成することを意味します。同じ変更が同じ方法で配置されますが、コミット ハッシュは異なります。(他の誰かがあなたのブランチから分岐している場合は、これを行わないでください!)

同じことを行う別の方法は、アップストリームに基づいて新しいブランチを作成し、次にgit cherry-pick保持したいコミットを作成することです。これは、現在のブランチを別の場所に移動するのではなく、任意の他のコミットを現在のブランチに持ち込むことを除いて、コミットを再生してまったく同じことを行います。

于 2013-01-23T22:02:35.670 に答える