Commit wählen Sie Änderungen dann in einem anderen Zweig Arbeit an noch laufenden Zweig wieder aufnehmen?

StackOverflow https://stackoverflow.com/questions/3871512

Frage

Dies geschieht oft in meinem Arbeitsablauf: Ich auf einem Feature in einem separaten Zweig bin zu arbeiten, und während dies zu tun Ich werde über kleine Dinge komme, dass Bedarf Befestigungs aber von weiter oben im Rahmen oder Site-Layout zum Beispiel .

Ich möchte die Haupt wechseln entwickeln Zweig und begehen Änderungen von ausgewählten Dateien gibt, dann zu einem zurückgehen Merkmal Zweig und rebase, damit ich weiter dort mit dem unabhängigen zwickt / Fehlerbehebung aus dem Weg.

Ich verwende git stash und git stash pop, dies zu tun, aber ich bin eine Menge Konflikte aus einer Reihe von Dateien bekomme ich modifed muß aber nicht sowieso an der Mutter Zweig verpflichtet werden.

Gibt es einen anderen Weg, um Konflikte zu vermeiden oder irgendwie speichern den aktuellen Stand, und nur ausgewählte Arbeitsbaum Änderungen für commiting zu einem anderen Zweig ziehen? (Art wie git-Stash-Kirsche-Pick; -))

War es hilfreich?

Lösung

  1. Bestätigen Sie die Änderungen, die Sie in master auf Ihrem aktuellen Zweig wollen.
  2. Stash weitere Änderungen
  3. Zum master Zweig und Verwendung git cherry-pick die Änderungen auf master bewegen
  4. Gehen Sie zu Ihrer Feder Zweig zurück und rebase (optional)
  5. Unstash die ursprüngliche Funktion Änderungen

Andere Tipps

Ich mache es in der Regel umgekehrt. Ich weiterhin in meiner Funktion Zweig arbeiten, bis ich bereit bin zu einem dort machen begehen. Sobald ich bin, ich alle Änderungen hinzufügen, die in den neuen gehören verpflichten für die Branche in den Index, aber nicht diejenigen, die in Master gehören. git add -p et.al machen, dass wirklich einfach. Sobald alle relevanten Änderungen im Index, lege ich auf den Zweig. Alle verbleibenden restlichen schmutzigen Änderungen gehören zu Master und werden zusammen ganz gut durchgeführt werden, sobald ich zu, dass wechseln, damit ich es dort begehen kann.

Versuchen Sie zurück zu master Zweigschalt --merge Option. Er wird versuchen, einen Drei-Wege-Merge zwischen den beiden Zweigen zu tun. Die git Dokumentation hat ein gutes Beispiel:

2. After working in the wrong branch, switching to the correct
   branch would be done using:

      $ git checkout mytopic

   However, your "wrong" branch and correct "mytopic" branch
   may differ in files that you have modified locally, in which 
   case the above checkout would fail like this:

      $ git checkout mytopic
      error: You have local changes to 'frotz'; not switching branches.

   You can give the -m flag to the command, which would try a
   three-way merge:

      $ git checkout -m mytopic
      Auto-merging frotz

   After this three-way merge, the local modifications are not
   registered in your index file, so git diff would show you what
   changes you made since the tip of the new branch.

Auf MacOS, GitX macht es sehr einfach, die Art der selektiven zu tun begehen Rafl beschreibt, so dass der eine gute Möglichkeit, sich ihr zu nähern, wenn das der Umwelt ist, du bist in.

Es ist auch möglich / praktisches Zweig-y Änderungen und Master-y Änderungen in separaten Commits zu begehen, dann verwenden git format-patch aus der Branche die Commits als Dateien exportieren und git am sie in den Master zu ziehen.

Hier besteht die Gefahr, wenn die Dateien um die Änderungen zu unterschiedlich sind, wobei in diesem Fall kann es zu Konflikten kommen, wenn die Commits in den Master zu ziehen.

Was ist ein temporären Zweig zu schaffen?

So etwas wie:

- oh crap need to do somethning else now
- git checkout -b ResumeLater
- git add .
- git commit
- git checkout ImportantStuff
- ....
- git checkout ResumeLater
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top