284

私は github でプロジェクトをフォークし、ローカル マスターに変更を加えて、github のオリジンにプッシュしています。プル リクエストを送信したいのですが、最後のコミットのみを含めたいです。github.com のプル リクエスト UI には、過去 9 件のコミットが表示されますが、それをフィルタリングする方法がわかりません。

新しいローカルブランチを作成する必要があるかどうかを理解しようとしていたのですが、それをチェックして、どういうわけかリセットまたはアップストリームにリベースしますか? 次に、ID によってマスターからの最後のコミットを新しいローカル ブランチに適用し、それをプル リクエストに使用しますか?

私は概念を正しく理解し、必要なことを実行するための適切なコマンド ラインを見つけようとしています。

4

7 に答える 7

59

元のリポジトリにもある最新のコミットから始まる新しいブランチを作成します。

git branch new-branch origin/master
git checkout new-branch

次にgit cherry-pick、プル リクエストが必要な単一のコミットを取得するために使用します。このコミットを含むブランチが呼び出されfeature、必要なコミットがこのブランチの最新のコミットである場合、これは次のようになります。

git cherry-pick feature

このパッチが競合なく適用されると仮定すると、プル リクエストを実行できるブランチができたことになります。

feature2 番目のステップでは、ブランチをどうするかを決める必要があります。このブランチで変更をまだ公開していない場合、最良の手順はおそらくこのブランチを new-branch にリベースすることです (これが によって自動的に行われない場合は、最後のコミットを削除しますgit rebase)。

于 2011-03-10T06:34:02.847 に答える
26

フォークをフォークして、元のプロジェクトにプルリクエストを送信したいという状況になりました。

私が持っていた:

  • original_project
  • forked_project (SHA: 9685770 の元のプロジェクトから作成)
  • my_fork (SHA: 207e29b でフォークされたプロジェクトから作成)
  • 元のプロジェクトに送信したいフォーク (SHA: b67627b) のコミット

これを行うには、次のことを行います。

  1. 元のプロジェクトがフォークされた SHA から新しいブランチを作成しました
  2. 元のプロジェクトからすべて引き出した
  3. プルリクエストとして提出したいコミットをチェリーが選んだ
  4. すべてをgithubにプッシュしました

git コマンドは次のようなものでした。

  1. git ブランチ my-feature-request 9685770
  2. git checkout my-feature-request
  3. git プルhttps://github.com/original_project/original_project.git
  4. git チェリーピック b67627b
  5. git push オリジン my-feature-request

次に、元のプロジェクトへのプル リクエストのブランチとして my-feature-request を選択しました。

于 2013-02-27T17:38:51.960 に答える
6

現在のブランチへのプルリクエストとして分離できるようにしたいコミットをすでに行っていました。

だから私は新しいブランチをチェックアウトしました

git checkout -b isolated-pull

そして、ここが私の解決策が @Kevin Hakanson のものと異なるところです。なぜなら、このブランチを履歴の中で差分を取りたい場所にリセットする必要があるからです。

git reset --hard [sha-to-diff-by]

そして、分離されたプルリクエストを作成したいコミットをチェリーピックします

git cherry-pick [my-isolated-commit-sha]

最後にリモコンに押し上げます

git push origin isolated-pull

そしてプルリクエストだ。

于 2016-07-01T12:57:00.253 に答える
6

これは私にとってほとんどうまくいきました:

git checkout -b upstream upstream/master

git cherry-pick <SHA hash of commit>

git push origin upstream

唯一の違いはこれでした:

git push origin upstream:upstream

最後の行を変更して、git push が GitHub リポジトリの上流ブランチを作成し、そこから PR を作成できるようにする必要がありました。

于 2015-07-26T10:47:03.840 に答える
0

@kevin-hakanson の回答に基づいて、このプロセスを簡単にするためにこの小さな bash スクリプトを作成しました。まだ存在しない場合はアップストリーム リポジトリが追加され (URL の入力を求められます)、作成する新しいブランチの名前と、そのブランチにチェリー ピックするコミットのタグ/SHA の両方を求めるプロンプトが表示されます。現在使用しているブランチまたはコミットを確認し、変更を隠して新しいブランチをチェックアウトできるようにします。マージ戦略は、厳選されたコミットからの変更を保持します。新しいブランチを (リモート リポジトリの名前であると想定されます) にプッシュした後origin、以前に使用していたブランチまたはコミットが再度チェックアウトされ、以前の変更がスタッシュからポップされます。

if ! git remote | grep -q upstream; then
    read -p "Upstream git repo URL: " upstream
    git remote add upstream $upstream
    git remote update
fi

read -p "Feature branch name: " feature_branch
# note: giving "master" is the same as giving the SHA it points to
read -p "SHA of commit to put on branch: " sha

current_branch=$(git rev-parse --abbrev-ref HEAD)
if [ "$current_branch" == "HEAD" ]; then
    # detached HEAD; just get the commit SHA
    current_branch=$(git rev-parse --short HEAD)
fi
git stash
git checkout -b $feature_branch upstream/master
git cherry-pick --strategy=recursive -X theirs $sha
git push origin $feature_branch
git checkout $current_branch
git stash pop

(これはいくつかの簡単なテストでうまくいきましたが、私は bash プログラマーでも git の専門家でもないので、もっと自動化できるケースを見逃していたら教えてください!)

于 2019-07-03T14:19:01.747 に答える