web-dev-qa-db-ja.com

1つのファイルのみのGitプルリクエスト

Gitリポジトリの2つのファイルに複数の変更を加えました(具体的には、brewに2つの数式を追加しました)。

変更を個別にコミットしました:

git commit file1
git commit file2

次に、GitHubへのプッシュを1回行いました。

git Push [email protected]:myname/homebrew.git

次に、アップストリームリポジトリに2つのプルリクエストを送信します。1つはfile1、もう1つはfile2です。これは可能ですか?

22
mankoff

同じコミットで両方のファイルを変更した場合は、できません。これは不可能です。プッシュとプルはコミットレベルで動作します。それらは分割されません。

まだ変更を共有していない場合は、コミットを2つに分割し、それぞれにブランチを作成してから、それらのプルリクエストを開始できます。

これは多くの方法がある方法の1つですが、たとえば、次のようなことができます。

# make sure the commit in question is the most recent
# make branch to point to the previous commit, leaving the changes in your work tree
git reset HEAD^
# commit the changes to the first file
git add file1
git commit
# make a branch for the first commit
git branch first-branch HEAD^
# commit the changes to the second file
git add file2
git commit
# create and check out a branch for this commit
git checkout -b second-branch
# rebase the branch back, so that it doesn't include the first commit
git rebase --onto HEAD^^ HEAD^ second-branch

# point your master branch somewhere that makes sense - maybe before either branch
git checkout master
git reset --hard first-branch^

これにより、次のような履歴が残ります。

- x (master) - A (first-branch)
   \
    - B (second-branch)

ここで、Aが変更されたfile1をコミットし、Bが変更されたfile2をコミットします。

履歴が希望どおりになったら、2つのブランチを個別にプッシュして、必要な処理を実行できます。

git Push Origin first-branch second-branch
10
Cascabel

各ファイルを独自のブランチに配置します。ブランチごとにプルリクエストを生成できます。これにより、必要な処理を実行できます。

10
Mat

リビジョン全体(実際にはリビジョンに至るブランチ全体)のみをフェッチできますが、リポジトリから個々のファイルにアクセスできます。

git checkout <rev> -- <file>