Yerel git taahhüdünün kilidini açma

Benim sorunum, dosyayı değiştirdim, örneğin: README, “test hattım için bu” yeni bir satır ekledi ve dosyayı kaydetti, sonra aşağıdaki komutları verdim

  git status # On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: README # no changes added to commit (use "git add" and/or "git commit -a") git add README git commit -a -m 'To add new line to readme' 

Github üzerindeki koda basmadım, şimdi bu işlemi iptal etmek istiyorum.

Bunun için kullandım

  git reset --hard HEAD~1 

Ancak README dosyasındaki yeni eklenen satırı “bu benim test hattım içindir”. Bu olmamalı. İçeride olmak için içeriğe ihtiyacım var. İçeriği kaydetmenin ve yerel taahhüdümü iptal etmenin bir yolu var mı?

560
31 янв. Amal Kumar S tarafından 31 Ocak tarihinde ayarlandı 2011-01-31 15:14 '11 15:14 2011-01-31 15:14
@ 7 cevaplar

git reset sadece - flag olmadan kullanın:

 git reset HEAD~1 

Not: Unix tabanlı sistemlerde, HEAD~1 olan HEAD^ kullanabilirsiniz. Windows'ta, HEAD^ çalışmayacak çünkü ^ hattın bir devamı olduğunu gösteriyor. Öyleyse, komut istemi sadece size More? fazlasını mı soruyor More? .

1085
31 янв. Cevap Koraktor'a 31 Ocak'ta verildi 2011-01-31 15:17 '11 15:17 2011-01-31 15:17

--hard bayrağı yerine --soft kullanın:

border=0
 git reset --soft HEAD^ 
143
10 авг. Cevap TpED 10 ağustos ayında verilmiştir . 2012-08-10 11:02 '12, 11:02, 2012-08-10 11:02

Bir taahhüdün ortasındaysanız (yani zaten editörde), ilk # üzerindeki tüm satırları silerek iptal edebilirsiniz. Bu, taahhüdü kesecek.

Böylece, tüm satırları silebilir, böylece mesajın boş olması için dosyayı kaydedebilirsiniz:

2019

Git'e, dizininizle (bir sonraki işleme girecek dosya kümesi) ve çalışma dizinini, parametrelerden birini kullanarak git resetleme işlemi yaparken ne yapacağınızı söyleyebilirsiniz:

--soft : sadece taahhütler sıfırlanacak ve dizin ve çalışma dizini değişmeyecek.

--mixed : Bu, dizini başlığa göre sıfırlar ve çalışma dizini etkilenmez. Tüm değişiklikler çalışma dizininde kalacak ve değiştirilmiş olarak görünecektir.

--hard : her şeyi (taahhüt, indeks, çalışma dizini) başlığa göre sıfırlar.

Sizin durumunuzda, değiştirilmiş değişikliklerinizi endekse ve çalışma dizinine kaydetmek için git reset --soft kullanırdım. Daha ayrıntılı bir açıklama için bunu kontrol ettiğinizden emin olun.

5
29 мая '18 в 13:22 2018-05-29 13:22 Cevap 29 Mayıs 18'de Nesha Zoriç tarafından 1:22 öğleden sonra 2018-05-29 13:22

Yapmanız gereken ilk şey, taahhüt mesajını silmeden önce yerel değişiklikleri kaydetmek isteyip istemediğinizi bulmaktır.

Geçerli taahhüt mesajlarını göstermek için git log kullanın ve silmek istediğinizden önce, yalnızca silmek istediğinizi değil, commit_id öğesini bulun.

Yerel olarak değiştirilmiş dosyaları kaydetmek istiyorsanız, sadece kabul mesajını silin:

git reset --soft commit_id

Yerel olarak değiştirilmiş tüm dosyaları ve taahhüt mesajını silmek istiyorsanız:

git reset --hard commit_id

Aradaki fark yumuşak ve serttir

2
02 сент. Cevabın mistdon 02 eylül verilir . 2018-09-02 06:43 '18, 06:43 2018-09-02 06:43

Aşağıdaki komutu kullanın: $ git reset HEAD ~ 1 Bundan sonra, aşağıda gösterilen şekilde döndürülen dosyaları da görüntüleyebilirsiniz.

Sıfırlamadan sonra tanımsız değişiklikler: M application / config / config.php M application / config / database.php

1
14 мая '18 в 16:25 2018-05-14 16:25 Cevap, 14 Mayıs 18: 16'da Omkar'da 16:25 2018-05-14 16:25

Git reset - mix, - soft ve --hard arasındaki fark

Önkoşul: Deponuzdaki mevcut bir dosyada bir değişiklik yapıldığında, bu değişiklik baş>git add kullanarak dizine eklemeniz anlamına gelir. İşleme işlemi sırasında, yerleştirilen dosyalar dizine eklenir.

Bir örnek alalım:

 - A - B - C (master) 

HEAD C gösterir ve indeks C karşılık gelir C

--soft

  • Bir git reset --soft B gerçekleştirdiğimizde - git reset --soft B silmek için C git reset --soft B ve ana / git reset --soft B .
  • Master / HEAD şimdi B'ye işaret edecek, ancak dizin hala C'den değiştirildi.
  • git status çalıştırırken git status C olarak dizine eklenen dosyaların aşamalı olarak görüldüğünü görebilirsiniz.
  • git commit bu noktada git commit , C'deki değişikliklerin aynısı ile yeni bir taahhüt oluşturacaktır.

--mixed

  • git reset --mixed B çalıştır - git reset --mixed B
  • Yürütülürken, ana / HEAD B'ye işaret eder ve dizin , kullanılan karışık bayrağa bağlı olarak B ile eşleşir .
  • Eğer şu an gitmiş bir iş yaparsak, endeks HEAD'e tekabül ettiği için hiçbir şey olmayacak.
  • Çalışma dizininde hala değişiklikler var, ancak dizinde olmadıklarından, git durumu onları yakalanmamış olarak gösteriyor .
  • Onları düzeltmek için, git add ve sonra her zamanki gibi düzeltmek gerekir.

--hard

  • git reset --hard B çalıştır - git reset --hard B
  • Master / HEAD'i yürütürken B'ye işaret eder ve çalışma dizininizi değiştirir
  • C’ye eklenen değişiklikler ve tüm kaydedilmemiş değişiklikler silinir .
  • Çalışma kopyasındaki dosyalar, B taahhüdüne tekabül eder, bu da C taahhüdünde yapılan tüm değişikliklerin yanı sıra kabul edilmeyen değişikliklerin kaybına yol açar.

git reset komutuyla kullanılabilecek bayrakları karşılaştırmanın birinin akıllıca kullanılmasına yardımcı olacağını umuyorum. Daha fazla bilgi için onlarla bağlantıya geçin link1 link2

0
18 янв. Cevap 18 Ocak Keshan Nageswaran tarafından verilmiştir. 2019-01-18 19:48 19: 19 : 48’de 2019-01-18 19:48

etiketleri ile ilgili diğer sorular veya Bir Soru Sor