Yanlış git dalını nasıl düzeltirim?

Yanlış dalda harika bir düzeltme yaptım. Ana şubemdeki son işlemi nasıl iptal edebilirim ve aynı değişiklikleri yapabilir ve güncelleme şubemde nasıl alabilirim?

414
31 мая '10 в 8:30 2010-05-31 08:30 mikewilliamson tarafından 31 Mayıs'ta saat 8 : 30'da düzenlendi 2010-05-31 08:30
@ 8 cevaplar

Değişikliklerinizi henüz tıklamadıysanız, yumuşak bir sıfırlama da yapabilirsiniz:

 git reset --soft HEAD^ 

Bu bir taahhütname döndürür, ancak düzeltilmiş değişiklikleri dizininizde döndürür. Dalların birbirine göre nispeten modern olduğunu varsayalım, git başka bir dalda bir çek düzenlemenize izin verecektir.

 git checkout branch git commit 

Dezavantajı, taahhüt mesajını tekrar girmeniz gerektiğidir.

618
31 мая '10 в 8:53 2010-05-31 08:53 Blair Holloway'e 31 Mayıs'ta 10: 8'de cevap verdi. 2010-05-31 08:53

Temiz (değiştirilmemiş) çalışan bir kopyaya sahipseniz

Bir işlemi geri al (bir sonraki adım için işlem karmasını kontrol ettiğinizden emin olun):

 git reset --hard HEAD^ 

Bu fiksasyonu başka bir şubeye aktarmak için:

border=0
 git checkout other-branch git cherry-pick COMMIT-HASH 

Değiştirdiyseniz veya değişiklikleri takip etmediyseniz

Ayrıca git reset --hard ve değiştirilemeyen değişiklikleri de öldüreceğini unutmayın; tercih ederseniz bunlara sahip olabilirsiniz:

 git reset HEAD^ git checkout . 
79
31 мая '10 в 8:33 2010-05-31 08:33 Michael Mrozek'e 31 Mayıs '10 08:33 2010 tarihinde yanıt verdi 2010-05-31 08:33

Konuya 4 yıl geç kaldı, ancak birisi için yararlı olabilir.

Ne kadar yapmış olursanız olun, her şeyi master'ınıza aktarmadan ve aktarmadan önce yeni bir şube oluşturmayı unuttuysanız, aşağıdaki yaklaşım daha basittir:

 git stash # skip if all changes are committed git branch my_feature git reset --hard origin/master git checkout my_feature git stash pop # skip if all changes were committed 

Şimdi ana şubeniz origin/master ve tüm yeni taahhütler my_feature . my_feature öğesinin uzak değil yerel bir dal olduğunu unutmayın.

61
06 февр. Cevap fotanus 06 Şubat'ta verilir. 2014-02-06 17:44 '14, 17:44 2014-02-06 17:44

Değişikliklerinizi zaten yaptıysanız, HEAD'i sıfırladıktan sonra bir sonrakini zorlamanız gerekir.

 git reset --hard HEAD^ git merge COMMIT_SHA1 git push --force 

Uyarı: donanımdan sıfırlama işlemi, çalışma kopyanızdaki bekleyen değişiklikleri iptal ederken, iterek yerel dalın geçerli durumuyla birlikte uzak dalın durumunun üzerine yazacaktır.

Durumda, Windows'ta (Windows komut satırını kullanarak, Bash değil), aslında bir tane yerine dört ^^^^ vardır,

 git reset --hard HEAD^^^^ 
17
31 мая '10 в 9:11 2010-05-31 09:11 Cevap, Igor Zevaka tarafından 31 Mayıs 'ta 9:11 2010-05-31 09:11 tarihinde verilmiştir.

Geçenlerde, kendimi başka bir şubeye adamak zorunda kaldığımda yanlışlıkla ustaya geçiş yaptığım zaman da aynısını yaptım. Ama ben hiçbir şeyi zorlamadım.

Yanlış şubeyi yeni oluşturduysanız ve o zamandan beri hiçbir şeyi değiştirmediyseniz ve repoyu tıklamadıysanız, aşağıdakileri yapabilirsiniz:

 // rewind master to point to the commit just before your most recent commit. // this takes all changes in your most recent commit, and turns them into unstaged changes. git reset HEAD~1 // temporarily save your unstaged changes as a commit that not attached to any branch using git stash // all temporary commits created with git stash are put into a stack of temporary commits. git stash // create other-branch (if the other branch doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // take the temporary commit you created, and apply all of those changes to the new branch. //This also deletes the temporary commit from the stack of temp commits. git stash pop // add the changes you want with git add... // re-commit your changes onto other-branch git commit -m "some message..." 

NOT. Yukarıdaki örnekte, git fikrini HEAD ~ 1 ile sıfırlama 1'i geri sardım. Fakat n geri ödemeyi geri almak istiyorsanız, git reset HEAD ~ 'i yapabilirsiniz.

Ek olarak, yanlış dalda çalışmayı tamamladıysanız ve başka bir kod yazmayı tamamladıysanız, yanlış dalda bulunduğunuzu fark etmeden önce, bitmemiş çalışmanızı kaydetmek için git stash komutunu kullanabilirsiniz:

 // save the not-ready-to-commit work you're in the middle of git stash // rewind n commits git reset HEAD~n // stash the committed changes as a single temp commit onto the stack. git stash // create other-branch (if it doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // apply all the committed changes to the new branch git stash pop // add the changes you want with git add... // re-commit your changes onto the new branch as a single commit. git commit -m "some message..." // pop the changes you were in the middle of and continue coding git stash pop 

NOT. Bu siteyi bir link olarak kullandım https://www.clearvision-cm.com/blog/what-to-do-when-you-commit-to-the-wrong-git-branch/

4
31 мая '17 в 0:51 2017-05-31 00:51 Cevap Ali Mizan tarafından 31 Mayıs 17'de 0:51 2017-05-31 00:51 tarihinde verilmiştir.

Eğer senaryonuz master geçtiyse, fakat another-branch geçmek zorundaysanız (zaten var olabilir veya olmayabilir), fakat henüz tıklamadıysanız, düzeltmesi oldukça kolaydır.

 // if your branch doesn't exist, then add the -b argument git checkout -b another-branch git branch --force master origin/master 

Şimdi, ustalığa verdiğiniz tüm taahhütler another-branch .

Kaynaklar: http://haacked.com/archive/2015/06/29/git-migrate/

2
08 апр. Cevap Lorcan O'Neill 08 Nis 2016-04-08 16:19 '16, 16:19, 2016-04-08 16:19

Bu sorunla karşılaşırsanız ve Visual Studio'ya sahipseniz, aşağıdakileri yapabilirsiniz:

Şubenizi sağ tıklayın ve View History seçin:

2019

05 апр. Cevap Trevor 05 nisan verildi . 2017-04-05 02:39 '17, 02:39 2017-04-05 02:39

Değişikliklerinizi uygulamak istediğiniz dal zaten mevcutsa (örneğin dallar geliştirmek için), aşağıdaki fotanus tarafından verilen talimatları uygulayın, ardından:

 git checkout develop git rebase develop my_feature # applies changes to correct branch git checkout develop # 'cuz rebasing will leave you on my_feature git merge develop my_feature # will be a fast-forward git branch -d my_feature 

Ve tabii ki, eğer istersen tempbranch ya da my_feature yerine başka bir dal adı kullanabilirsin.

Ayrıca, varsa, hedef şubenizde bir araya gelene kadar açılır iletiyi (geçerli) geciktirin.

0
24 авг. Cevap fbicknel 24 ağustos tarafından verildi . 2016-08-24 01:15 '16, 1:15, 2016-08-24 01:15

etiketleri veya soru sor ile ilgili diğer sorular