Commit wählen Sie Änderungen dann in einem anderen Zweig Arbeit an noch laufenden Zweig wieder aufnehmen?
-
28-09-2019 - |
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; -))
Lösung
- Bestätigen Sie die Änderungen, die Sie in
master
auf Ihrem aktuellen Zweig wollen. - Stash weitere Änderungen
- Zum
master
Zweig und Verwendunggit cherry-pick
die Änderungen aufmaster
bewegen - Gehen Sie zu Ihrer Feder Zweig zurück und
rebase
(optional) - 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