Mettere modifiche senza impegno su Master in una nuova filiale di Git


Risposte:


151

Puoi semplicemente fare il checkout nel ramo di test e quindi eseguire il commit. Non perdi le modifiche non impegnate quando ti sposti in un altro ramo.

Supponendo di essere nel ramo principale:

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

Non sono davvero sicuro dei file eliminati, ma immagino che non siano inclusi quando lo usi git add .


12
A volte il checkout fallirà perché le tue modifiche sono in conflitto con quel ramo. Puoi provare il checkout -m per unire.
Jouni K. Seppänen,

2
Ho provato questo ma ho ricevuto un errore: errore: le modifiche locali ai seguenti file verrebbero sovrascritte dal checkout. Per favore, commetti le modifiche o nascondile prima di poter cambiare ramo.
Ishwr,

Mentre questo funzionerà, la risposta che dice usare stash dovrebbe essere preferita, IMO. Forse solo una scelta personale, ma è un flusso di lavoro più pulito, logicamente e introduce STASH che è un comando utile.
Patrick,

Manca l'opzione "-b", poiché il titolo suggerisce che la domanda riguarda un "nuovo" ramo.
Guntram,

195

Inoltre puoi creare un nuovo ramo e passare ad esso facendo:

git checkout -b new_branch
git add .

Lo uso sempre perché dimentico sempre di iniziare un nuovo ramo prima di iniziare a modificare il codice.


3
stesso problema riscontrato da @jouni per l'altra risposta: è possibile riscontrare difficoltà nel riunire il ramo in master se ulteriori modifiche sono in conflitto con le modifiche originali. IMO questa discussione risponde alla domanda migliore: stackoverflow.com/questions/556923/...
jpw

Breve, dolce e rassicurante ... "Lo uso sempre ..."
ϹοδεMεδιϲ

1
Non dimenticare di eseguire il commit nel new_branch. Se torni al ramo principale e ripristini i file modificati, li perderai anche nel new_branch.
petrsyn,

36

Perché non usare solo git stash. Penso che sia più intuitivo come un copia e incolla.

$ git branch
  develop
* master
  feature1
  TEST
$

Hai alcuni file nel tuo ramo attuale che vuoi spostare.

$ 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
$

Passa all'altro ramo.

$ git checkout TEST

E applicare

$ 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
#

Mi piace anche git stashperché uso git flow, che si lamenta quando si desidera terminare un ramo di funzionalità pur avendo ancora modifiche nella directory di lavoro.

Proprio come @Mike Bethany, questo mi succede sempre perché lavoro su un nuovo problema dimenticandomi di essere ancora su un altro ramo. Quindi puoi riporre il tuo lavoro git flow feature finish...e git stash applynella nuova git flow feature start ...filiale.


2
git stashè il mio modo preferito di gestire le modifiche senza impegno. È certamente un metodo intuitivo quando lo consideri come taglia e incolla.
Matthew Mitchell,

Questo mi sembra un buon approccio. Ha funzionato senza problemi.
Yunus Nedim Mehel

Non sapevo che potresti farlo e ha funzionato bene. Sembra un po 'più intuitivo rispetto agli altri metodi.
Glaucon,

Penso che nascondere sia un modo più professionale, invece di usare git checkout e quindi aggiungere. Penso che la tua risposta dovrebbe essere di oltre 100 voti.
Matrosov Alexander,

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

5
git checkout TEST
git add file1 file2
git commit
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.