117

最近、GitHubのプロジェクトに参加しました。私は次のことをしました:

元のリポジトリをフォークし、ローカルマシンに複製し、既存のバグを修正するためのブランチを作成し、そのブランチにあるバグを修正し、そのブランチをリポジトリにプッシュし、リポジトリの作成者にプルリクエストを送信して、修正ブランチをにマージします。そのマスターブランチ。

他人のコードをコミットするのは初めてだったので、どうしたらよいかわかりません。これで、プルリクエストが作成者によって元のリポジトリ/プロジェクトにマージされました。

次に何をすればいいですか?ブランチを削除する必要がありますか?ブランチをマージする必要がありますか?他に何か?


追加情報:

元のプロジェクトには単一のブランチがあります。

また、元のリポジトリから最新の更新を取得するためのアップストリームセットもあります。(私はこのようにしました)

git remote add upstream https://path/to/original/repo.git

そして、私はこのような更新を受け取ります:

git fetch upstream
4

2 に答える 2

69

次に行うことは、新しい機能を提供したり、専用のブランチで他のバグを修正したりすることです(フォークにのみプッシュされます)。

つまり、フォークは残りますが、フォーク内のブランチは行き来できます。

これ以上貢献する予定がない場合は、フォークを削除することもできますが、「貢献するリポジトリ」の対応するエントリが削除されます

次の方が簡単です。

  • フォーク(およびローカルのクローンリポジトリ内:「ローカルとリモートの両方でGitブランチを削除する」を参照)でブランチを削除しますfix(実際には、これで削除されます) 。
  • git pull upstream mastermaster修正が統合されたブランチの場合:マージは早送りになります):この時点でリベースは必要ありません。
  • master更新されたローカル(現在はfrom )の上に修正ブランチを再作成しますupstream master

ただし、将来のプルリクエストを送信する前に、次の1つの手順を忘れないでください。

fix最初に現在のブランチ( )をアップストリームの宛先ブランチからリベースします

upstreamフォークした元のリポジトリです。「githubのオリジンとアップストリームの違いは何ですか」を参照してください)

元のリポジトリ(「アップストリーム」)に何かを送信する前に、作業が元のリポジトリの最新のものに基づいていることを確認する必要があります(または、プルリクエストが適用されると早送りマージになりません)リポジトリに戻るupstream)。
たとえば、「githubの共有リポジトリでプルリクエストを管理するためのワークフロー」を参照してください。

言い換えれば、upstream修正に忙しいときに進化する(新しいコミットをプッシュする)ことができます。コミットが最新のと互換性があることを確認するために、アップストリームからその最新の作業に加えて修正を再生する必要がありますupstream


OP Santosh Kumarコメントで尋ねます:

私はマスターにプルしてマージしupstreamました、今何ですか?

最近のプルリクエスト以降に新しい修正を行っていない場合は、上記を参照してください(fix更新されたものの上に新しいブランチを削除して再作成しますmaster)。

プルリクエスト以降にさらに作業を行った場合、新しいプルリクエストupstreamを作成する場合は、マージしません。プルしてリベースします。

git pull --rebase upstream master

そうすることで、将来のプルリクエストを統合するターゲットブランチであると想定して、すべての新しいローカル作業が最新のupstream masterコミット(ローカルリポジトリでフェッチされた)の上に再生されます。master

次に、ローカル作業を''にプッシュできます。originこれは、のGitHubのフォークですupstream
そして、GitHubのフォークから、upstreamマージ解決を必要とせずに新しいコミットのみを追加することを知っているので、プルリクエストを安全に行うことができます。これらの新しいコミットをリポジトリにマージupstreamすると、単純な早送りマージが意味されます。


git pull --rebase(現在チェックアウトされている)ブランチをリベースするブランチを指定しないと、機能しfixません。

それ(git pull --rebase)は言う:

You asked to pull from the remote '`upstream`', but did not specify a branch. 

最後にマスターを追加する必要がありますか?そして、これは何をしますか?、それは私のfixブランチを削除しますか?

はい、プルリクエストのターゲットとなるブランチを指定できます(例:' master')。
それはあなたのブランチを削除しませんが、あなたのリポジトリでフェッチされたfixアップストリームの上にそれを再生します。master

于 2012-10-07T19:18:03.483 に答える
21

まず、Githubのプロジェクトへの最初の貢献おめでとうございます。

通常のGithubワークフローは、解決するすべての問題に対して新しいブランチを作成することです。このようにして、メインラインリポジトリのメンテナは、どのソリューションをマージし、どのソリューションを拒否するかを決定できます。ブランチがアップストリームにマージされた後、ブランチは不要になり、通常は削除できます。

于 2012-10-07T16:25:44.783 に答える