Git-Pull-Request für nur eine Datei [duplicate]

Lesezeit: 3 Minuten

Benutzer-Avatar
mankoff

Ich habe mehrere Änderungen an zwei Dateien in einem Git-Repository vorgenommen (insbesondere zwei Formeln zum Brauen hinzugefügt).

Ich habe die Änderungen einzeln übernommen:

git commit file1
git commit file2

Ich habe dann einen Push zu GitHub gemacht:

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

Ich möchte jetzt zwei Pull-Requests an das Upstream-Repository senden, einen für Datei1, einen für Datei2. Ist das möglich?

  • Nein habe ich gemacht git commit und dann, laut Brew CookBook, git push [email protected]:myname/homebrew.git. Jetzt möchte ich eine Pull-Anfrage an das Upstream-Repo senden.

    – mankoff

    7. Dezember 2011 um 19:52 Uhr

  • @zed_0xff: Ich glaube nicht. help.github.com/send-pull-requests

    – Kaskabel

    7. Dezember 2011 um 19:52 Uhr

  • @halfdan: Bitte lesen Sie die FAQ, bevor Sie weitere Behauptungen darüber aufstellen, worum es hier geht. Der Anwendungsbereich von SO umfasst „Software-Tools, die häufig von Programmierern verwendet werden“, und hier gibt es fast zwölftausend Git-Fragen.

    – Kaskabel

    7. Dezember 2011 um 19:59 Uhr

Benutzer-Avatar
Cascabel

Wenn Sie beide Dateien im selben Commit geändert haben, ist dies nicht möglich. Pushs und Pulls arbeiten auf Commit-Ebene; sie werden sie nicht trennen.

Wenn Sie die Änderungen noch nicht freigegeben haben, können Sie den Commit in zwei Teile aufteilen, für jeden einen Zweig erstellen und dann Pull-Anforderungen für diese initiieren.

Dies ist eines der Dinge, für die es viele Möglichkeiten gibt, aber Sie könnten zum Beispiel so etwas tun:

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

Dies würde Ihnen eine Geschichte wie diese hinterlassen:

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

wo Commit A modifizierte Datei1 und Commit B modifizierte Datei2.

Sobald der Verlauf Ihren Wünschen entspricht, können Sie die beiden Zweige separat pushen und mit ihnen tun, was Sie tun müssen:

git push origin first-branch second-branch

  • Geklärte Frage. Ich habe es anders gemacht commits, aber eins push.

    – mankoff

    7. Dezember 2011 um 20:02 Uhr

  • @mankoff: Dann kannst du an der Stelle in meiner Anleitung beginnen, an der ich den zweiten Commit erstellt habe. Ich werde den Rest verlassen, da es für andere nützlich sein könnte.

    – Kaskabel

    7. Dezember 2011 um 20:09 Uhr

  • Wo mache ich den Push in dieser Reihenfolge? Wenn ich es dann am Ende mache, steht dort ‘Alles aktuell’.

    – mankoff

    7. Dezember 2011 um 20:27 Uhr


  • @mankoff: Dann hast du diese Äste wahrscheinlich nicht geschoben?

    – Kaskabel

    7. Dezember 2011 um 20:35 Uhr

Legen Sie jede Datei in einen eigenen Zweig. Sie können für jeden Zweig eine Pull-Anforderung generieren, die das tun soll, was Sie möchten.

Sie können nur die gesamte Revision abrufen (eigentlich den gesamten Zweig, der zu der Revision führt), aber Sie können dann auf einzelne Dateien aus Ihrem Repository zugreifen:

git checkout <rev> -- <file>

  • Das fragt er nicht.

    – Halbdan

    7. Dezember 2011 um 19:54 Uhr

  • Um die Wahrheit zu sagen, ich kann immer noch nicht herausfinden, was es dann ist …

    – Michael Krelin – Hacker

    7. Dezember 2011 um 19:55 Uhr

1176430cookie-checkGit-Pull-Request für nur eine Datei [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy