Wprowadzanie niezatwierdzonych zmian w Master do nowego oddziału przez Git


Odpowiedzi:


151

Możesz po prostu przejść do oddziału testowego, a następnie zatwierdzić. Nie tracisz swoich nieoczekiwanych zmian, przenosząc się do innego oddziału.

Załóżmy, że jesteś w oddziale głównym:

git checkout test
git add .
git add deletedFile1
git add deletedFile2
...
git commit -m "My Custom Message"

Naprawdę nie jestem pewien co do usuniętych plików, ale myślę, że nie są one uwzględnione, gdy używasz git add .


12
Czasami kasa się nie powiedzie, ponieważ zmiany powodują konflikt z tą gałęzią. Możesz spróbować realizacji transakcji -m, aby scalić.
Jouni K. Seppänen

2
Próbowałem tego, ale wystąpił błąd: błąd: lokalne zmiany w następujących plikach zostałyby zastąpione przez kasę. Zatwierdź zmiany lub schowaj je, zanim będziesz mógł zmienić oddziały.
ishwr

Chociaż to zadziała, odpowiedź, która mówi, że używanie skrytki powinno być preferowane, IMO. Może po prostu osobisty wybór, ale jest to logicznie czystszy przepływ pracy i wprowadza STASH, który jest przydatnym poleceniem.
Patrick,

Brakuje opcji „-b”, ponieważ nagłówek sugeruje, że pytanie dotyczy „nowej” gałęzi.
Guntram

195

Możesz także utworzyć nowy oddział i przejść do niego, wykonując:

git checkout -b new_branch
git add .

Używam tego cały czas, ponieważ zawsze zapominam założyć nowy oddział, zanim zacznę edytować kod.


3
ten sam problem, co @jouni zanotowany dla drugiej odpowiedzi - możesz napotkać trudności z połączeniem gałęzi z powrotem w master, jeśli dodatkowe zmiany są sprzeczne z oryginalnymi zmianami. IMO ten wątek lepiej odpowiada na pytanie: stackoverflow.com/questions/556923/…
jpw 20.04.13

Krótko, słodko i uspokajająco ... „Używam tego cały czas ...”
ϹοδεMεδιϲ

1
Nie zapomnij wykonać commit w new_branch. Jeśli przełączysz się z powrotem na gałąź główną i przywrócisz zmienione pliki, stracisz je również w gałęzi new_branch.
petrsyn

36

Dlaczego nie skorzystać z git stash. Myślę, że jest bardziej intuicyjny jak kopiowanie i wklejanie.

$ git branch
  develop
* master
  feature1
  TEST
$

W bieżącym oddziale masz kilka plików, które chcesz przenieść.

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#      modified:   awesome.py
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   linez.py
#
$
$ git stash
Saved working directory and index state \
  "WIP on master: 934beef added the index file"
HEAD is now at 934beef added the index file
(To restore them type "git stash apply")
$
$ git status
# On branch master
nothing to commit (working directory clean)
$
$
$ git stash list
stash@{0}: WIP on master: 934beef ...great changes
$

Przejdź do drugiej gałęzi.

$ git checkout TEST

I aplikuj

$ git stash apply
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   awesome.py
#      modified:   linez.py
#

Podoba mi się również, git stashponieważ używam git flow, który narzeka, gdy chcesz zakończyć gałąź funkcji, a zmiany są nadal w katalogu roboczym.

Podobnie jak @Mike Bethany, zdarza mi się to cały czas, ponieważ pracuję nad nowym problemem, zapominając, że wciąż jestem w innym oddziale. Możesz więc ukryć swoją pracę git flow feature finish...i git stash applynowy git flow feature start ...oddział.


2
git stashto mój preferowany sposób radzenia sobie z niezatwierdzonymi zmianami. Jest to z pewnością intuicyjna metoda, gdy myślisz o tym jako wycinanie i wklejanie.
Matthew Mitchell,

To wydaje mi się dobre podejście. Działa bez problemu.
Yunus Nedim Mehel

Nie wiedziałem, że możesz to zrobić i działało to ładnie. Czuje się nieco bardziej intuicyjnie niż inne metody.
glaucon

Myślę, że ukrywanie to bardziej profesjonalny sposób, zamiast korzystania z usługi git checkout, a następnie dodawania. Myślę, że twoja odpowiedź powinna wynosić ponad 100 głosów.
Matrosow Alexander

1
@ Καrτhικgit stash --include-untracked
2Toad

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.