2011-07-01 17 views
5

Çoktan Git'in iyi bir kavrayışını sandım ama şimdi şaşırdım. Dalların diğer şubelerden gelen değişiklikleri tecrit edeceğini düşündüm, bu yüzden yeni bir dalda büyük bir deneysel refactoring başlattım. Bu refactoring, birçok dosya taşıma ima etti. Master'a geçtiğimde yine de değişiklikleri görebiliyordum!Git: dallar değişiklikleri yalıtmalı mı, yoksa yapmamalı mı?

$ git branch crazy-refactoring 
$ git checkout crazy-refactoring 
$ rm README 
$ git checkout master 
$ git status 
# On branch master 
# Changes not staged for commit: 
# (use "git add/rm <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  deleted: README 
# 
no changes added to commit (use "git add" and/or "git commit -a") 
$ ls README 
ls: cannot access README: No such file or directory 

Neden:

Sorunu çoğaltmak için benim sandbox deposuna gitti? Bir dal yaratmanın bütün noktası, bir şey deneyebilirim ve başarısız olsaydım onu ​​atmaktı. Düşünceleriniz?

+3

Silmeyi gerçekleştirmediniz. Sadece taahhüt edilen değişiklikler "izole edilmiş" dir. –

+1

Haklısınız, README'yi işledikten sonra, çılgın refactoring şubesinde, ana dalda yeniden ortaya çıktı. Belki bir şeyi özlüyorum ama bana garip ve istenmeyen bir davranış gibi geliyor. – stivlo

+0

bu da beni ilk başta attı, ama şimdi her zaman bir dalda bir değişiklik yaptığımda ve daha sonra da ayrı bir dalda atmayı tercih ettiğimde davranışa güveniyorum. – butter71

cevap

6

Silmeyi gerçekleştirmediniz. Sadece taahhüt edilen değişiklikler "izole edilmiş" dir. Yorumunuza İlişkin

:

Belki bir şey eksik, ama bu garip ve istenmeyen davranış gibi geliyor bana.

Bir düşünün:

Sen crazy-refactoring yılında README silinmiş ama değişiklik yapmadı. Git dosyayı değiştirdiğini ve bunu yapmadığınızı bilir. için değişikliklerinizi koruyun, başka bir şubeyi kontrol ederseniz bunları geçersiz kılmaz.
Aksi takdirde Git'in, değişiklikleri yaptığınız dallara geri döndüğünüzde değişikliklerin ne olduğunu bilmesinin bir yolu yoktur. Kaybolurlar ve bu, diğer daldaki değişiklikleri görmekten çok daha kötüdür.

Geçerli çalışma dizini, geçerli şube + kaydedilmemiş değişikliklerdir (bunları sıfırlamadıkça).

Elbette, Git, diğer şubeye bakarken sizi uyardı, değişiklikleri değiştirmediniz, ancak bazen değişikliklerin ve başka bir şubeye geçmesi istenir.

+1

Ayrıca ek açıklama için teşekkürler, ayrıca tereyağı71 olarak da yararlı olabileceğini söyledi. – stivlo

İlgili konular