Git pull request pour un seul fichier [dupliquer]

cette question a déjà une réponse ici:

  • annuler les modifications d'une copie de travail d'un fichier dans Git? 12 réponses

j'ai apporté plusieurs modifications à deux fichiers d'un dépôt Git (plus précisément, j'ai ajouté deux formules à brew).

j'ai engagé les changements individuellement:

git commit file1
git commit file2

j'ai alors fait une poussée à GitHub:

git push git@github.com:myname/homebrew.git

j'aimerais maintenant envoyer deux requêtes pull au dépôt amont, une pour file1, une pour file2. Est-ce possible?

20
demandé sur Peter Mortensen 2011-12-07 23:48:12

3 réponses

si vous avez changé les deux fichiers dans la même propagation, alors non, ce n'est pas possible. Les push et les pulls fonctionnent à un niveau de commit; ils ne les divisent pas.

si vous n'avez pas encore partagé les modifications, vous pouvez diviser le commit en deux, créer une branche pour chacune, puis lancer des requêtes pull pour celles-ci.

C'est l'une de ces choses il y a plusieurs façons de faire, mais par exemple, vous pourriez 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 l'histoire comme ceci:

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

où commit un fichier modifié1, et commit B fichier modifié2.

une Fois que l'histoire ressemble à la façon dont vous l'aimez, vous pouvez pousser les deux branches séparément et faire ce que vous devez faire avec eux:

git push origin first-branch second-branch
10
répondu Cascabel 2011-12-07 20:34:52

Mettez chaque fichier sur sa propre branche. Vous pouvez générer une requête pull pour chaque branche, qui devrait faire ce que vous voulez.

9
répondu Mat 2011-12-07 19:53:57

vous ne pouvez récupérer que la révision complète( en fait, toute la branche menant à la révision), mais vous pouvez alors accéder à des fichiers individuels à partir de votre dépôt:

git checkout <rev> -- <file>
1
répondu Michael Krelin - hacker 2011-12-07 19:53:21