git - Şubeniz 1 kaydetme ile "kaynak / ana" değerinin önünde


107

Git konusunda acemiyim ve git üzerinde çalışıyorum.

Git'e bazı dosyalar ekledim:

git add <file1>
git add <file2>

sonra bunu incelemeye zorlamak istedim, ancak yanlışlıkla yaptım

git commit

bu yüzden değiştirdiğim dosyalar incelemeye gitmiyor.
Şimdi komutu girersem:

git status

diyor ki

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)

Bu kaydı geri döndürmek istiyorum ve bu dosyaları kaydetme yerine gözden geçirilmek üzere göndermek istiyorum. Bunu nasıl yapabileceğimi bana söyleyen var mı?


Taahhüdünüzü geri almak istiyorsanız - benzer soruya bir göz atın .
ДМИТРИЙ МАЛИКОВ

1
Kod incelemeleri için ne kullandığınızı bilmiyorum. git reset HEAD^
Taahhüdün

HEAD'i sıfırladım. ama sonra itmeye çalıştığımda, psuh yapmaya çalıştığımda bana D file1.py diyor, sonra tekrar dalınızın 1 commit ile orijin / master'ın önünde olduğunu söylüyor
sam

"Bu dosyaları incelenmek üzere göndermek istiyorum" derken ne demek istiyorsun? Başkalarının taahhüdünüzü görmesini ister misiniz?
Jake Greene

kodum önce incelenecek ve sonra işleme alınacaktır. bu yüzden ilk önce kodu gözden geçirmek için zorlamak istiyorum ama yanlışlıkla taahhüt ettim
sam

Yanıtlar:


128

Henüz taahhüt edilmemiş hiçbir şeyi zorlayamazsınız. İşlem sırası şöyledir:

  1. Değişikliğini yap.
  2. git add - bu, taahhüt için yaptığınız değişiklikleri aşamalar
  3. git commit - bu, aşamalı değişikliklerinizi yerel olarak uygular
  4. git push - bu, yaptığınız değişiklikleri bir uzaktan kumandaya iter

Taahhüt etmeden iterseniz, hiçbir şey itilmez. Eğer eklemeden taahhüt ederseniz, hiçbir şey taahhüt edilmez. Kaydetmeden eklerseniz, hiçbir şey olmaz, git sadece eklediğiniz değişikliklerin aşağıdaki commit için dikkate alınması gerektiğini hatırlar.

Gördüğünüz mesaj (şubeniz 1 kaydetme ile önde), yerel deponuzda henüz aktarılmamış bir kayıt olduğu anlamına gelir.

Başka bir deyişle: addve commityerel operasyonlardır, push, pullvefetch operasyonlardır bir uzaktan kumanda ile etkileştiği söyledi.

Çalıştığınız yerde resmi bir kaynak kontrol iş akışı var gibi göründüğünden, bunun nasıl ele alınması gerektiğini dahili olarak sormalısınız.


4
aha tamam. yani bu, taahhütten sonra onu zorlamam gerektiği anlamına geliyor
sam

4
İyi bir açıklama - soruyu soran kişi muhtemelen kesinlemeyi gerçekten geri döndürmek istemez, bunun yerine, işlemeyi origindepoya aktarmadan önce insanların işlemeyi gözden geçirmesini ister . Ayrıca git-scm.com/documentation adresindeki
dbr

1
Git durumum "Şubeniz 1 commit ile 'kaynak / geliştirme'den önde." dosyaların değiştirildiğini tam olarak nasıl görebilirim? git diff hiçbir şey yapmıyor
Tom

Bazen orada çalışan başka biri oluyor. İtmeden önce çekiş
Adrian P.

68

git reset HEAD^ --soft (Değişikliklerinizi kaydedin, son işleme geri dönün)

git reset HEAD^ --hard (Değişiklikleri atın, son işleme geri dönün)


3
HEAD'in havuç '^' ile önemi nedir? Havuç olmadan da yazıldığını gördüm.
Mugen

29

Sadece değişiklikleri atmak ve son işleme (paylaşmak istediğiniz) geri dönmek istiyorsanız:

git reset --hard HEAD~

Bunu istediğinizden kesinlikle emin olmak için kontrol etmek isteyebilirsiniz (git log ) , çünkü tüm değişiklikleri kaybedeceksiniz.

Daha güvenli bir alternatif çalıştırmaktır

git reset --soft HEAD~ # reset to the last commit
git stash              # stash all the changes in the working tree 
git push               # push changes 
git stash pop          # get your changes back 

21

Bunu basit bir şekilde çözdüm:

git pull

Daha fazlası yok. Şimdi gösteriyor:

# On branch master
nothing to commit, working directory clean

Gerekli olmayan birden fazla oluşturulmuş şube olması sorun yaratabilir.
Anil Kumar Arya

1
uzak eyaletinize geri döndünüz ve son çalışmanızı kaybettiniz: D
Gucho Ca

13

git sıfırlama KAFA ^

daha sonra değiştirilen dosyalar görünmelidir.

Değiştirilen dosyaları yeni bir dala taşıyabilirsiniz

kullanım

git checkout -b newbranch

git checkout commit -m "files modified"

git push origin newbranch

git checkout master

temiz bir dalda olmalısınız ve değişiklikleriniz yeni dalda saklanmalıdır. Daha sonra bu değişikliği ana dalda birleştirebilirsiniz


4
git reset HEAD <file1> <file2> ...

belirtilen dosyaları sonraki işlemden kaldı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.