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.