web-dev-qa-db-fra.com

Git pull request pour un seul fichier

J'ai apporté plusieurs modifications à deux fichiers dans un référentiel Git (en particulier, j'ai ajouté deux formules à brasser).

J'ai engagé les changements individuellement:

git commit file1
git commit file2

J'ai ensuite fait un Push to GitHub:

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

Je voudrais maintenant envoyer deux demandes d'extraction au référentiel en amont, une pour file1, une pour file2. Est-ce possible?

22
mankoff

Si vous avez modifié les deux fichiers dans le même commit, alors non, ce n'est pas possible. Les push et pulls fonctionnent à un niveau de validation; ils ne les sépareront pas.

Si vous n'avez pas encore partagé les modifications, vous pouvez diviser la validation en deux, créer une branche pour chacune, puis lancer des demandes d'extraction pour celles-ci.

C'est l'une de ces choses qu'il existe de nombreuses façons de faire, mais par exemple, vous pouvez faire quelque chose comme ceci:

# 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^

Cela vous laisserait avec une histoire comme celle-ci:

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

où valider le fichier modifié A1 et valider le fichier modifié B2.

Une fois que l'historique ressemble à ce que vous aimez, vous pouvez pousser les deux branches séparément et faire ce que vous devez en faire:

git Push Origin first-branch second-branch
10
Cascabel

Mettez chaque fichier sur sa propre branche. Vous pouvez générer une demande d'extraction pour chaque branche, ce qui devrait faire ce que vous voulez.

10
Mat

Vous ne pouvez récupérer que la révision entière (en fait, toute la branche menant à la révision), mais vous pouvez ensuite accéder à des fichiers individuels à partir de votre référentiel:

git checkout <rev> -- <file>