3

すべてではなく一部のコミットのみをプルリクエストしたい場合はどうなりますか?

レポ Foo があり、そのレポを Bar としてフォークしたとします。次に、コミット 1 と 2 を Bar に行います。commit 2 を Foo に戻したいだけですが、どうすればいいですか?

私はgitホストとしてbitbucketを使用しているので、コマンドラインで実行する必要があると確信しています。どうも。

4

2 に答える 2

5

git cherry-pickおそらくここの方がいいと思いますが、私は を使用するのが好きgit rebase -iです.

(1) まず、新しいブランチを作成します (プル リクエストされます)。

git checkout -b commit2_PR

(2) 次に、対話型リベース (-i対話型の場合):

git rebase -i commit2_PR^^ commit2_PR

注意: 最初の引数は、関心のある最後の (最も古い) コミットのである必要があります。

(3) エディタは、最後の 2 つのコミットで起動されます。下部には非常に役立つ指示が表示されます。ここで、プル リクエストで不要なコミットの行を削除します (この場合、コミット 1 を削除し、コミット 2 のみを残します)。さて、保存して終了し、git rebaseそのことを行います。

(3.1) マージの競合が発生した場合、マージは停止し、指示に従って通常の方法で修正する必要があります。これは、歴史に干渉するときに驚くほど頻繁に発生します。

(4) 最後に、この新しいブランチcommit2_PR- そのブランチをプルリクエストします。終わり。


リベース (および/またはグーグル) のマンページを読み、それを数回試してみることを強くお勧めします。引数を使って単純化できる方法がありますが、git rebaseここで複雑にするのではなく、マンページを読むために残します...恐れないでください!!! 新しいブランチを作成したので、それを台無しにしたり、どれだけひどいものにしたりしても問題ありません。そのブランチを削除して、もう一度やり直してください。元のブランチは変更されずに残っています。

プル リクエストを読みやすくするためにできる素晴らしいことがあります - コミットを一緒にスカッシュ (結合) する、コミットを並べ替える、コミットを分離する (git add -p途中で新しいコミットを作成する)、コミット メッセージを編集する、コミット内容をコミットしているかのように変更する初めてなど。

まだプッシュしておらず、まだ非公開である場合は、この方法で履歴を書き換えてもまったく問題ありません。これは、出版前に小説を編集するようなもので、より意味があり、読みやすく、エラーが少なくなります。(たとえば、エラーを修正する必要がありますが、まだ公開されていない場合、読者はいつ修正したかを知る必要はありません。)

于 2013-08-06T00:58:59.313 に答える
0

コミット 2 は、コミット 1 の上に作成されています。これは、依存関係がある可能性があることを意味します。git cherry-pick <commit2>Bar の寄稿者が commit2 を Foo マージベースの上にリベースし、それを独立したプル リクエストとして再送信する場合は、またはそれ以上の使用が可能です。

于 2013-08-05T23:13:57.883 に答える