Git add'ı çalıştırsam da çalıştırmasam da git, dalları değiştirdiğimde (değiştirilen, eklenen, silinen dosyalar) neden değişikliklerimi göstermeye devam ediyor?


115

Git konusunda gerçekten yeniyim ve git'in neden başka bir dalda bir dalda değiştirdiğimi göstermeye devam ettiğini anlamaya çalışıyorum, git checkout'u dallar arasında geçiş yapmak için çalıştırdığımda İlk önce git add kullanmamaya çalıştım ve çalışmadım. Ancak, git add kullanmayı denedim, ancak sorunu çözmedim. Henüz git commit kullanmıyorum.

Temelde yaptığım şey bu:

$ git clone <a_repository>  
$ git branch  
* master  
$ git branch testing  
$ git checkout testing  
...edit a file, add a new one, delete...  
$ git status  
    # On branch testing  
    # Changed but not updated:  
    #   (use "git add/rm <file>..." to update what will be committed)  
    #   (use "git checkout -- <file>..." to discard changes in working directory)  
    #  
    #       deleted:    file1.txt  
    #  
    # Untracked files:  
    #   (use "git add <file>..." to include in what will be committed)  
    #  
    #       file2.txt  
no changes added to commit (use "git add" and/or "git commit -a")  
$ git branch  
  master  
* testing  
$ git checkout master  
D       file1.txt  
Switched to branch 'master'  
$ git status  
    # On branch master  
    # Changed but not updated:  
    #   (use "git add/rm <file>..." to update what will be committed)  
    #   (use "git checkout -- <file>..." to discard changes in working directory)  
    #  
    #       deleted:    file1.txt  
    #  
    # Untracked files:  
    #   (use "git add <file>..." to include in what will be committed)  
    #  
    #       file2.txt  
no changes added to commit (use "git add" and/or "git commit -a")  

Dalları kullanırken bir dalda ne yaparsanız yapın diğer dallara görünmez diye düşündüm. Şube yaratmanın nedeni bu değil mi?

"Git add" kullanmayı denedim, ancak değişiklikler her iki dalda da görülebilir. Bunu önlemek için dallar arasında geçiş yapmadan önce "git commit" çalıştırmam gerekir mi?

Yanıtlar:


142

Şubeler arasında geçiş yapmak, taahhüt edilmeyen değişiklikleri yanınızda taşır. Önce taahhüt git checkout .edin, geri almak için çalıştırın veya git stashgeçiş yapmadan önce çalıştırın . (İle değişikliklerinizi geri alabilirsiniz git stash apply)


10
git stash pop, büyük bir zula yığını oluşturmak istemediğiniz sürece daha iyidir.
siride

7
@JPZ: git stash yalnızca izlenen dosyalarla ilgilenir; yeni dosyalar izlenmez, bu nedenle saklanmazlar.
siride

2
@JPZ: İzlenmemiş dosyaları saklamak istiyorsanız, yapmanız gereken şey git addonları saklamadan önce yapmaktır. Bununla birlikte, gerçekten burada saklamak isteyip istemediğinizden emin değilim - bu değişikliklerin, uzaklaştığınız dalın bir parçası olmasını istiyorsanız, onları uygulayın. (Bu şubeye geri dönmeyi ve değişiklikleri taahhüt etmeden önce daha fazla çalışmayı stashdüşünüyorsanız, iş için doğru araç olabilir.)
Cascabel

16
"Şubeleri değiştirmek sizinle birlikte beklenmedik değişiklikler taşır" - Bu mantıklı ve belki de en kötü tasarım fikri. İzole bir şekilde çalışamazsanız şubelere sahip olmanın ne anlamı var? !!!
nehem

1
Benim durumumda, bir geliştirme şubesinden bir özellik şubem var. Özellik dalında taahhütte bulundum, ancak geliştirme dalını kontrol ettiğimde değişiklikleri de gösteriyor.
Hitesh Garg

31

Kısa cevap: evet, taahhüt etmeniz gerekiyor. Yine de doğru dalda yaptığınızdan emin olun!

Dal, kesinleştirme için bir göstericidir. Bir şubeyi teslim aldığınızda taahhüt ettiğinizde, şube bu yeni taahhüdü işaret etmek için ilerler. Bir şubeyi kontrol ettiğinizde, işaret ettiği taahhüdü kontrol edersiniz. (İşlemleri, çalışma ağacınızın anlık görüntüleri olarak düşünebilirsiniz.)

Bu nedenle, taahhüt etmediğiniz değişiklikleriniz varsa, şubeleri değiştirmekten etkilenmeyeceklerdir. Tabii ki, şubeleri değiştirmek, değişikliklerinizle uyumsuzsa, git checkoutbunu yapmayı reddedecektir.

git adddaha sonra gerçekleştireceğiniz değişiklikleri aşamalandırmak için bir komuttur. Bu değişiklikleri havuzun geçmişine kaydetmez. Basitçe onları bir evreleme alanına (dizin) yerleştirir; git commitdaha sonra, taahhütler oluşturmak için bu hazırlık alanının içeriğini kullanır.

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.