Yanlışlıkla yanlış şubeye bağlı kaldım. Bu taahhüdü nasıl silerim?
Yanlışlıkla yanlış şubeye bağlı kaldım. Bu taahhüdü nasıl silerim?
Yanıtlar:
Yaptığınız işi koruyarak en son taahhüdü silin:
git reset --soft HEAD~1
Yaptığınız işi yok ederek en son taahhüdü silin :
git reset --hard HEAD~1
git reset --hard origin
git remotebenim için kökeni listeliyor, git reset --hard origindiyor fatal: ambiguous argument 'origin': unknown revision or path not in the working tree.. Neden?
git reset HEAD~1ayrıca tüm değişikliklerinizi koruyacak, ancak her şeyi saklamak yerine boş bir dizin bırakacaktır ( --softseçenek gibi ).
Bulduğum en iyi cevabın neden sadece yorumlarda olduğunu merak ediyorum! ( Daenyth tarafından 86 oyla )
git reset --hard origin
Bu komut, yerel deponuzu, yerel deponuzda yaptığınız her değişiklikten kurtulmak için uzak havuzla eşitler. Ayrıca, kaynak noktanızdaki tam dalı almak için aşağıdakileri yapabilirsiniz.
git reset --hard origin/<branch>
git reset --hard origin/<branch>
git reset --soft origin/<branch>, taahhütten kurtulmak, ancak yerel işi tutmak istiyorsanız.
fatal: ambiguous argument 'origin': unknown revision or path not in the working tree.: Eğer dal gibi belirtmeniz gerekir,git reset --hard origin/feature/my-cool-stuff
Silmeyin: sadece bir taahhüt git cherry-pickyeterlidir.
Ancak yanlış dalda birkaç taahhüdünüz varsa , işte burada git rebase --ontoparlar:
Varsayalım:
x--x--x--x <-- master
\
-y--y--m--m <- y branch, with commits which should have been on master
, işaretlemek masterve istediğiniz yere taşıyabilirsiniz:
git checkout master
git branch tmp
git checkout y
git branch -f master
x--x--x--x <-- tmp
\
-y--y--m--m <- y branch, master branch
, y dalını olması gereken yere sıfırlayın:
git checkout y
git reset --hard HEAD~2 # ~1 in your case,
# or ~n, n = number of commits to cancel
x--x--x--x <-- tmp
\
-y--y--m--m <- master branch
^
|
-- y branch
ve son olarak taahhütlerinizi taşıyın (yeniden uygulayın, yeni taahhütler verin)
git rebase --onto tmp y master
git branch -D tmp
x--x--x--x--m'--m' <-- master
\
-y--y <- y branch
Bu taahhüdü başka bir şubeye taşımak istiyorsanız, söz konusu taahhüdün SHA'sını alın
git rev-parse HEAD
Ardından geçerli dalı değiştirin
git checkout other-branch
Ve cherry-picktaahhütother-branch
git cherry-pick <sha-of-the-commit>
git reset --hard HEAD~1daha sonraları gerektirir . Bence reset --softo zaman şubeleri değiştirmek ve tekrar işlemek ekstra işten tasarruf etmiş olurdu. Sonra yine benim temel şeyler yapmak için SourceTree kullanıyordum, sadece benim hatadan sonra bu komut satırı-line.
Referans olarak, sadece git reset --hard ile değil, aynı zamanda aşağıdaki komutla mevcut şubenizden "sabit kesim" yapabileceğinize inanıyorum:
git checkout -B <branch-name> <SHA>
Aslında, kontrol etmeyi umursamıyorsanız, şubeyi istediğiniz herhangi bir şeye ayarlayabilirsiniz:
git branch -f <branch-name> <SHA>
Bu, örneğin yeni taahhütleri (rebase kullanarak) kopyalamak için bir şubeden taahhütleri kaldırmanın programlı bir yolu olacaktır.
Diyelim ki, başka bir konumdan kaynakları alıp da şubeye döktüğünüz için master bağlantısı kesilmiş bir şubeniz var.
Artık değişiklikleri uyguladığınız bir şubeniz var, buna "konu" diyelim.
Şimdi konu dalınızın bir kopyasını oluşturacak ve daha sonra dal "dökümü" nde bulunan kaynak kodu dökümü üzerine yeniden oluşturacaksınız:
git branch topic_duplicate topic
git rebase --onto dump master topic_duplicate
Şimdi değişiklikleriniz, topic_duplicate dalında "dump" ın başlangıç noktasına göre yeniden uygulanıyor, ancak yalnızca "master" dan bu yana gerçekleşen taahhütler uygulanıyor. Master'dan bu yana değişiklikleriniz artık "döküm" ün üstünde yeniden uygulanıyor ancak sonuç "topic_duplicate" ile sonuçlanıyor.
Daha sonra "döküm" ü "topic_duplicate" ile değiştirebilirsiniz:
git branch -f dump topic_duplicate
git branch -D topic_duplicate
Veya ile
git branch -M topic_duplicate dump
Veya sadece çöplüğü atarak
git branch -D dump
Belki de şu anki "topic_duplicate" i temizledikten sonra kiraz toplayabilirsiniz.
Söylemeye çalıştığım, farklı bir atadan yola çıkarak geçerli "yinelenen" dalı güncellemek istiyorsanız, önce bir " git reset --hard <last-commit-to-retain>veya" git branch -f topic_duplicate <last-commit-to-retain>ve sonra diğer taahhütleri ( konu dalı) yeniden basma veya kiraz toplama yoluyla.
Yeniden pazarlama, yalnızca taahhütleri zaten olan bir dalda çalışır, bu nedenle bunu her yapmak istediğinizde konu dalınızı çoğaltmanız gerekir.
Kiraz yetiştiriciliği çok daha kolaydır:
git cherry-pick master..topic
Böylece tüm sekans aşağıya inecektir:
git reset --hard <latest-commit-to-keep>
git cherry-pick master..topic
Konu yinelenen dalınız kullanıma alındığında. Bu, daha önce seçilen kiraz işlemlerini geçerli kopyadan kaldıracak ve geçerli "dökümünüzün (farklı ata)" üstündeki "konu" da gerçekleşen tüm değişiklikleri yeniden uygulayacaktır. Yerel değişikliklerinizin hala geçerli olup olmadığını kontrol etmek için farklı bir "aşağı akış" ustası kullanırken, gelişiminizi "gerçek" akış yukarı master'a dayandırmak için oldukça uygun bir yol gibi görünüyor. Alternatif olarak sadece bir fark üretebilir ve daha sonra herhangi bir Git kaynak ağacının dışına uygulayabilirsiniz. Ancak bu şekilde, gerçek gelişiminiz gerçek yukarı akış ustasına karşı iken, dağıtımınızın sürümüne dayanan güncel bir değiştirilmiş (yamalı) sürüm tutabilirsiniz.
Sadece göstermek için:
Umarım bu birine yardımcı olur. Bunu yeniden yazmak demekti ama şimdi başaramıyorum. Saygılarımızla.
Benim için çalışan komutun ardından, tüm yerel taahhüt edilen değişiklikler kaldırılır ve yerel, uzak kaynak / ana dal ile aynı şekilde sıfırlanır.
git reset --hard kökenli