Ana tarafından Git tarafından yeni bir şubeye taahhüt edilmemiş değişiklikler koymak


Yanıtlar:


151

Sadece test şubesine ödeme yapabilir ve ardından taahhütte bulunabilirsiniz. Başka bir şubeye taşınırken değişmeden yaptığınız değişiklikleri kaybetmezsiniz.

Ana dalda olduğunuzu varsayalım:

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

Silinen dosyalar hakkında gerçekten emin değilim, ancak kullandığınızda bunların dahil olmadığını düşünüyorum git add .


12
Bazen değişiklikleriniz bu dalla çakıştığından ödeme başarısız olur. Birleştirmek için -m çıkışını deneyebilirsiniz.
Jouni K. Seppänen

2
Bunu denedim ama bir hatayla karşılaştım: hata: Aşağıdaki dosyalarda yaptığınız yerel değişikliklerin çıkışları üzerine yazılır. Lütfen, şubeleri değiştirmeden önce değişikliklerinizi yapın veya saklayın.
ishwr

Bu işe yarayacak olsa da, stash kullanımı yazan cevap tercih edilmelidir, IMO. Belki sadece kişisel seçim, ama daha temiz bir iş akışı, mantıksal olarak ve yararlı bir komut olan STASH'ı tanıttı.
Patrick

Başlık, sorunun "yeni" bir dalla ilgili olduğunu belirttiği için "-b" seçeneği eksik.
Guntram

195

Ayrıca, yeni bir şube oluşturabilir ve şu yolla geçiş yapabilirsiniz:

git checkout -b new_branch
git add .

Bunu her zaman kullanıyorum çünkü kodu düzenlemeye başlamadan önce her zaman yeni bir dal başlatmayı unutuyorum.


3
diğer yanıt için @jouni ile aynı sorun - ek değişikliklerin orijinal değişikliklerle çakışması durumunda şubeyi yeniden master haline getirmekte zorluk çekebilirsiniz. IMO bu konuya daha iyi cevap veriyor: stackoverflow.com/questions/556923/…
jpw

Kısa, tatlı ve güven verici ... "Bunu her zaman kullanıyorum ..."
ϲοδεMεδιϲ

1
New_branch içinde işlemeyi unutmayın. Ana şubeye geri dönüp değiştirilen dosyaları geri alırsanız, bunları new_branch içinde de kaybedersiniz.
Mart'ta petrsyn

36

Neden git stash kullanmıyorsunuz? Sanırım kopyala ve yapıştır gibi daha sezgisel.

$ git branch
  develop
* master
  feature1
  TEST
$

Geçerli dalınızda taşımak istediğiniz bazı dosyalar var.

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

Diğer şubeye gitme.

$ git checkout TEST

Ve başvur

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

Ayrıca , çalışma dizininizde hala değişiklikler yaparken bir özellik dalını ne zaman bitirmek istediğinizi şikayet git stashettiğim için kullanıyorum .git flow

@Mike Bethany gibi, bu her zaman başıma geliyor çünkü hala başka bir dalda olduğumu unuturken yeni bir sorun üzerinde çalışıyorum. Yapabilecekleriniz Yani saklamak , işinizi git flow feature finish...ve git stash applyyeniye git flow feature start ...şube.


2
git stashtaahhüt edilmemiş değişikliklerle başa çıkmak için tercih ettiğim yol. Kes ve yapıştır olarak düşündüğünüzde kesinlikle sezgisel bir yöntemdir.
Matthew Mitchell

Bu benim için iyi bir yaklaşım gibi görünüyor. Sorunsuz çalıştı.
Yunus Nedim Mehel

Bunu yapabileceğini bilmiyordum ve güzel çalıştı. Diğer yöntemlerden biraz daha sezgisel geliyor.
glaucon

Bence saklamak git checkout kullanmak ve daha sonra eklemek yerine, daha profesyonel bir yoludur. Sanırım cevabınız 100+ oy olmalı.
Matrosov Alexander

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.