Yanlış bir git şöbəsini necə düzəldə bilərəm?

Mən yalnız yanlış şöbəyə böyük bir düzəliş etdim. Mənim əsas şöbəmdəki son işi necə ləğv edə bilərəm, sonra eyni dəyişiklikləri edim və onları yeniləmə şöbəsinə göndərə bilərəm?

414
31 мая '10 в 8:30 2010-05-31 08:30 mikewilliamson tərəfindən 31 may 2010-cu ildə saat 08.30-da təyin olunaraq 2010-05-31 08:30
@ 8 cavab

Değişikliklerinizi henüz tıklamazsanız, yumşaq bir sıfırlama da edə bilərsiniz:

 git reset --soft HEAD^ 

Bu, bir öhdəliyi qaytaracaq, lakin düzəlişlərinizi indeksinizə qaytaracaq. Şöbələr bir-birinə nisbətən nisbətən müasir olduqlarını nəzərə alaraq, git başqa bir şöbədə bir çek idarə etməyə imkan verir, bundan sonra düzəliş edə bilərsiniz:

 git checkout branch git commit 

Dezavantajı, mesajı təkrar daxil etmək lazımdır.

618
31 мая '10 в 8:53 2010-05-31 08:53 31 May 'da 8:53' də Blair Holloway'a cavab verdi 2010-05-31 08:53

Təmiz (dəyişdirilməmiş) işçi surətiniz varsa

Bir öhdəliyə geri qayıdın (növbəti addım üçün hash işini yoxladığınızdan əmin olun):

 git reset --hard HEAD^ 

Bu fiksiyanı digər şöbəyə köçürmək üçün:

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

Değişiklikləri və ya dəyişiklikləri izlemediyseniz

Həm də unutmayın ki, git reset --hard istənilən unplayable və dəyişdirilmiş dəyişiklikləri öldürəcəkdir , buna görə də üstünlükləriniz varsa:

 git reset HEAD^ git checkout . 
79
31 мая '10 в 8:33 2010-05-31 08:33 31 May 'da 8:33' də Michael Mrozek'e cavab verdi 2010-05-31 08:33

Mövzuya 4 il gec qaldı amma kimsə üçün faydalı ola bilər.

Tərəqqi vermədən və hər şeyi hər ikinizə köçürdükdən əvvəl yeni bir şöbə yaratmaqğı unutduğunuz halda, nə qədər çalışsanız da, aşağıdakı yanaşma daha sadədir:

 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 

İndi əsas my_feature origin/master və bütün yeni my_feature . Qeyd edək ki, my_feature bir uzaq bir deyil, yerli bir filialdır.

61
06 февр. Cavab verilir fotanus 06 fevral. 2014-02-06 17:44 '14 da 17:44 2014-02-06 17:44

Zaten değişikliklerinizi yapmış olsanız, HEAD'i sıfırladıktan sonra birisini zorlamanız lazımdır.

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

Diqqət: sıx sıfırlama işləyən surətinizdə gözlənilən dəyişiklikləri ləğv edəcək, itələyərkən, uzaq filialın vəziyyətini yerli şöbənin mövcud vəziyyəti ilə əvəz edəcəkdir.

Yalnız halda, Windows-da (Windows komut satırını istifadə edərək, Bash deyil), həqiqətən dördün birinə ^^^^ var, buna görə də

 git reset --hard HEAD^^^^ 
17
31 мая '10 в 9:11 2010-05-31 09:11 Cavab Igor Zevaka tərəfindən 31 May 'da 9:11' də verildi. 2010-05-31 09:11

Mən başqa bir şöbəyə həsrət etməli olduğum zaman ustadın keçidini təsadüfən yerinə yetirərkən son vaxtlarda da eyni şeyi etdim. Amma bir şey itirmədim.

Əgər yalnız səhv şöbəni yaratdığınız və o zamandan bəri heç bir şey dəyişməmisinizsə və repo üzərinə tıklamadıysanız, aşağıdakıları edə bilərsiniz:

 // 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..." 

Qeyd. Yuxarıdakı nümunədə mən 1 başlığını sıfırlama HEAD ~ 1 ilə düzəldirdim. Lakin n əmrləri geri çəkmək istəyirsinizsə, birbaşa HEAD ~ n yenidən qura bilərsiniz.

Bundan əlavə, səhv şöbə ilə işlədiyiniz və başqa bir kod yazdıqdan sonra, səhv filialın etdiyini başa düşməzdən əvvəl bitməmiş işinizi xilas etmək üçün qapaqdan istifadə edə bilərsiniz:

 // 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 

Qeyd. Bu saytdan bir keçid kimi istifadə edirə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 cavab 31 may 17: 00-da 0:51 2017-05-31 00:51 tarixində Əli Mizan tərəfindən verilir

Beləliklə, ssenariniz ustaddan keçmişdirsə, ancaq another-branch keçmək deməkdir (mövcud ola və ya olmaya bilər), lakin hələ tıklamamısınızsa, bu, düzəldilmək üçün çox asandır.

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

İndi master üçün bütün öhdəliklər another-branch .

Mənbələr: http://haacked.com/archive/2015/06/29/git-migrate/

2
08 апр. Cavab Lorcan O'Neill 08 Apr 2016-04-08 16:19 '16 saat 16:19 'da 2016-04-08 16:19

Bu problemlə karşılaşırsanız və Visual Studio varsa, aşağıdakıları edə bilərsiniz:

Şöbünüzə sağ vurun və View History :

2019

05 апр. Cavab Trevor 05 apr verilir . 2017-04-05 02:39 '17 də 2:39 2017-04-05 02:39

Dəyişikliklərinizi tətbiq etmək istədiyiniz filial zaten mövcuddur (məsələn, filial inkişaf etdirmək üçün), aşağıdakı fotanus tərəfindən verilən təlimatları izləyin, sonra:

 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 

Və, əlbəttə, isterseniz tempbranch və ya hər hansı digər şöbə adını my_feature əvəzinə istifadə edə bilərsiniz.

Bundan əlavə, əgər varsa, hədəf şöbünüzə birləşdiriləcəyi qədər pop-up mesajını (tətbiq) gecikdirin.

0
24 авг. Cavab fbicknel 24 aug tərəfindən verilir . 2016-08-24 01:15 '16 saat 1:15 'də 2016-08-24 01:15' də

etiketləri ilə bağlı digər suallar və ya bir sual verin