2016-07-04 21 views
3

Ich habe zwei Zweig,Kann ich dem Staging-Bereich Änderungen aus einem anderen Zweig hinzufügen?

  • Master
  • neue Funktionen

Neue Funktionen hat eine befiehlt ich zu meistern hinzufügen will, aber ich mag die Kontrolle, wie viel ich will verschmelzen.

Ich möchte die Option zum Hinzufügen/Ablehnen von Änderungen für jede Zeile. Ähnlich kann ich mit git add -p

Ich habe viel gesucht wahrscheinlich suchte ich falsche Begriff. Dies scheint eine ziemlich offensichtliche Aufgabe zu sein.

+1

Es gibt nur sind in einem Arbeitsverzeichnis, das ist nicht eins pro Zweig. – choroba

+0

@choroba: In der Tat gibt es nur einen * Standard * Staging-Bereich (aka "der" Index), aber Sie können Ihren eigenen temporären Index mit der Umgebungsvariable 'GIT_INDEX_FILE' definieren. Das ist für diese spezielle Aufgabe nicht sinnvoll.:-) Aber leider ist es etwas, was man wissen muss, um ein paar Ecken von 'git commit -a' zu erklären, und sich mit' --only' oder '--include' begnügt. – torek

+0

@torek Sie können mehrere Arbeitsverzeichnisse mit einem lokalen Repository haben, von denen jedes seinen eigenen Index hat. Also hast du beide recht: P – poke

Antwort

3

Verwenden git cherry-pick mit der -n|--no-commit Option und was dann interaktiv auswählen zu begehen:

git cherry-Pick

...

-n, --no-commit

Normalerweise git cherry-pick erstellt automatisch eine Sequenz o f verpflichtet sich. Dieses -Flag wendet die Änderungen an, die erforderlich sind, um jede benannte Commit-Datei in Ihren Arbeitsbaum und den Index zu übernehmen, ohne einen Commit zu tätigen.. Wenn die Option verwendet wird, muss Ihr Index nicht mit dem HEAD-Commit übereinstimmen. Die Cherry-Auswahl erfolgt gegen den Anfangszustand Ihres Indexes.

Dies ist nützlich, wenn Sie mehr als einen Commits-Effekt auf Ihren Index in Folge anwenden.

git cherry-pick -n <commitid> # merge commitid into the index and working-tree 
git reset      # clear the index 
git add -p      # selectively add merged changes to the index 

Alternativ Sie git reset -p zu entfernen unerwünschte große Stücke aus dem Staging-Bereich verwenden können:

So ist die Folge von Befehlen wird der folgende sein

eine Inszenierung
git cherry-pick -n <commitid> # merge commitid into the index and working-tree 
git reset -p # interactively remove from the index changes brought by commitid 
+0

Danke, es hat funktioniert. Ich habe es vorher mit 'cherry-pick' versucht, aber ich habe' -n' nicht benutzt. Schätze deine Hilfe! – Sisir

2

Ich denke, Sie können versuchen, Patch-Datei zu verwenden.

git checkout master 
git diff ..new-features > patch.diff 

In Datei patch.diff Sie haben Unterschied zwischen den Zweigen Master und neuen Funktionen:
Zum Patch-Datei Lauf zu erstellen.
Jetzt können Sie Patch-Datei anwenden, führen:

git apply patch.diff 

Jetzt können Sie Ihre Änderungen in jeder gewünschten Art und Weise verwalten.

+0

@Leon Ja, ich meinte Patch. Dank dir! Ich habe diesen Tippfehler bereits behoben. –