Uzaq bir Git deposuna sabit bir tövsiyəni necə basa bilərəm?

Mənim kodumda bir iş gördükdə, adi bir şey etdim, sonra da uzaqdan saxladığım deposu tıkladım. Amma sonra mən idxalını mənbə koduna təşkil etməyi unutdum. Buna görə də əvvəlki tövsiyəni əvəz etmək üçün bir dəyişiklik əmri edirəm:

 > git commit --amend 

Təəssüf ki, tövsiyə depoya qaytarıla bilməz. Aşağıdakı kimi rədd edilir:

 > git push origin To //my.remote.repo.com/stuff.git/ ! [rejected] master -> master (non-fast forward) error: failed to push some refs to '//my.remote.repo.com/stuff.git/' 

Nə etməliyəm? (Uzaq havuza girebilirim.)

475
31 окт. Spoike komandası 31 oktyabr 2008-10-31 13:23 '08 saat 13:23 'da 2008-10-31 13:23
@ 13 cavab

Mən, həqiqətən, bir dəfə - " .git və " .git deposunu tıkladım və Linus BIG TIME- dən lənətə .git . Ümumiyyətlə, bu, digər insanlar üçün bir çox problem yaradır. Sadə cavab: "Bunu etməyin."

Bunun üçün bir resept verən başqaları görürəm, buna görə də burada təkrarlamayacağam. Amma burada - force (və ya master) ilə düzəldilmiş fiksasiya vurduqdan sonra vəziyyətdən qurtulmaq üçün bir işarə var.

  • Sizə əmanət etdiyiniz köhnə öhdəliyi tapın ( old adlandırın və yeni dəyişikliklə yaratdığınız yeni əmri seçəcəyik).
  • new ağac yazaraq, oldnew birləşmə yaradın, məsələn, git checkout new git merge -s ours old .
  • git merge master istifadə edərək master ilə git merge master
  • Sihirbazınızı git push . HEAD:master yeniləyin git push . HEAD:master git push . HEAD:master
  • Nəticəni yazdırın.

Sonra, sizin işinizi dayandırdığınız, düzəldən və zorladığınız ( çox pis bir oğlan ) məcbur etdiyiniz fikrə əsaslanmaq üçün kifayət qədər müvəffəqiyyətsiz olan insanlar, birləşmənin nəticəsini görür və old new istifadə etdiyini görürsünüz. Onların sonrakı birləşmələri dəyişikliklər nəticəsində ortaya çıxan oldnew münaqişələri görməyəcək, buna görə əziyyət çəkməyə ehtiyac yoxdur.

371
11 янв. cavab gitster tərəfindən verilir 11 yanvar. 2009-01-11 10:36 '09 at 10:36 AM 2009-01-11 10:36

Git təhlükəsizlik xüsusiyyətini görürsünüz. Git bir filialın uzaq bir filialını yeniləməkdən imtina edir, çünki başlıq şöbəsi siz vurduğunuz şöbə başlığının indiki təyinatının birbaşa nəslindən deyildir.

Əgər belə olmasaydı, eyni vaxtda eyni qəsəbəyə basdıran iki nəfər eyni vaxtda yeni bir əməlin baş vermədiyini və sonuncunu ittiham edən işini itirdiyini bilməyəcəkdi. Onlardan heç biri olmadan əvvəlki itələyici.

Əgər siz tıkladığınız tək bir şəxs olduğunuzu bilirsinizsə və siz sabit fikrə basın və ya filiala veto qoyduğunuz düzeltmeyi basarsanız, uzaq şöbəni -f keçid ilə yeniləmək üçün "Git" edə bilərsiniz.

 git push -f origin master 

Git uzaqdan saxlaya bilmək üçün, hətta bu, işə yaramır, çünki uzaqdan saxlaya bilərsiniz. Əgər belədirsə, imtina səbəbi bu kimi görünür ("uzaq uğursuzluq" hissəsini qeyd edin):

border=0
  ! [remote rejected] master -> master (non-fast forward) 

Bununla yanaşı, uzaq deponunun konfiqurasiyasını dəyişdirməlisiniz və ya çirkli hack kimi, şöbəni aşağıdakı şəkildə silə və yenidən yaratmalısınız:

 git push origin :master git push origin master 

Ümumiyyətlə, <local_ref>:<remote_ref> git push funksiyasının son parametri <local_ref>:<remote_ref> , burada local_ref yerli ehtiyatdakı filialın adıdır və remote_ref uzaq remote_ref filialın adıdır. Bu əmr cütü iki qısaldılmışdır. :master null local_ref, yəni masterun uzaq tərəfində sıfır filialının qoyulması, yəni uzaq bir dalın silinməsi deməkdir. Şöbə adı olmadan : adı göstərilən adı olan yerli şöbə eyni adı olan uzaq şöbəyə yönəldilir. master bu vəziyyət master:master üçün qısadır master:master .

218
01 нояб. Charles Bailey tərəfindən verilmiş cavab 01 noyabr. 2008-11-01 00:58 '08 saat 00:58 'da 2008-11-01 00:58

Sürətli rant: heç kimin sadə bir cavab vermədiyi faktı, istifadəçinin ümidsiz düşmənliyini göstərir və Git CLI ilə ortaya çıxır.

Hər halda, bunu təkan verməyə cəhd etmədiyinizi fərz etsəniz, bunu "aydın" şəkildə, ilk növbədə çıxarmaqdır. Bu, sizin etdiyiniz dəyişikliyə gətirib çıxaracaq (və buna görə də artıq yoxdur) belə ki, yenidən görünür.

Hər hansı bir münaqişəni həll edərsinizsə, yenidən vurun.

Beləliklə:

 git pull 

Çəkildiyində səhvlər varsa, yerli ehtiyat konfiqurasiyanızla bir şey səhvdir (mənim .git / config bölməsində etibarsız ref var idi).

Və sonra

 git push 

"Trivial birləşmə" mövzusu ilə əlavə fiksasiya əldə edə bilərsiniz.

184
22 сент. Tim Band tərəfindən verilmiş cavab 22 sentyabr 2009-09-22 13:46 '09 da saat 13:46 'da 2009-09-22 13:46

Qısa cavab: ictimai repoda düzəlişləri düzəltməyin.

Uzun cavab: bir neçə Git əmri, məsələn, git commit --amendgit rebase , əslində tarixi süjetin yenidən yazılması. Dəyişikliklərinizi dərc etməyinizə qədər yaxşıdır, ancaq bir dəfə bunu hekayə ilə aldatmamanız lazımdır, çünki əgər kimsə birbaşa dəyişiklikləri qəbul etmişsə, onda bir daha onları çıxarmağa çalışdıqda, dəyişiklik etmək əvəzinə Bir öhdəlikdə yalnız dəyişikliklərlə yeni bir öhdəlik etmək lazımdır.

Lakin, həqiqətən, düzəlişli bir mesajı basmaq istəyirsinizsə, bunu belə edə bilərsiniz:

 $ git push origin +master:master 

Öncəki + işareti, "sürətli irəli" bir təsbitə gətirib çıxara bilməsə belə mətbuata məcbur edəcək. (Tez keçid, siz vurduğunuz dəyişikliklər ictimai repo-da dəyişikliklərin birbaşa nəsli olduqda baş verir.)

86
31 окт. Cavab 31 oktyabrda mipadi tərəfindən verilir 2008-10-31 17:35 '08 at 17:35 'da 2008-10-31 17:35' da

commit --amend etdiyinizdən sonra dəyişikliklərinizi etmək üçün asan və təmiz bir yoldur - əlavə commit --amend :

 git reset --soft HEAD^ git stash git push -f origin master git stash pop git commit -a git push origin master 

Aşağıdakılar nədir:

  • Filial şöbələrinin başçılarını yenidən bərpa edin.
  • Son törətməyə basın.
  • Uzaqdan idarə etmək üçün zorla basmaq. İndi uzaq kompüterdə son işi yoxdur.
  • Cüzdanınıza daxil olun.
  • Təmiz oxuyun.
  • Uzaqdan nəzarətə vurun.

Başqa şöbəyə və ya uzaq cihazlara tətbiq edərsəniz, "mənşə" və "master" dəyişdirməyi unutmayın.

20
21 июня '15 в 17:41 2015-06-21 17:41 cavab 21 iyun 2014-cü il saat 17: 15-da təqdim olunur

Yerli düzəlişi ləğv edərək və üstdən yeni dəyişikliklər əlavə edərək bunu həll etdim:

 # Rewind to commit before conflicting git reset --soft HEAD~1 # Pull the remote version git pull # Add the new commit on top git add ... git commit git push 
16
24 сент. Cavab 24 sentyabrda verilir 2012-09-24 18:46 '12 at 18:46 2012-09-24 18:46

Eyni problemim vardı.

  • Zaten basılan son düzeltme təsadüfi olaraq düzəldildi.
  • Yerli olaraq edilən bir çox dəyişiklik beş dəfə ediləcək
  • Klikləməyə, səhv almağa, çaxnaşmaya, uzaqdan birləşməni birləşdirməyə, qeyri-fayllarımın çoxunu əldə etməyə, tıklandığına, uğursuzluğuna və s.

Bir git kimi, mən FUBAR tərəfindən tamamlandığını düşündüm.

Qərar. Birbaşa fərqli olaraq @bara təklif etdiyinə görə + yerli bir yedek şöbəsi yaradır

 # Rewind to commit just before the pushed-and-amended one. # Replace <hash> with the needed hash. # --soft means: leave all the changes there, so nothing is lost. git reset --soft <hash> # Create new branch, just for a backup, still having all changes in it. # The branch was feature/1234, new one - feature/1234-gone-bad git checkout -b feature/1234-gone-bad # Commit all the changes (all the mess) not to lose it  not to carry around git commit -a -m "feature/1234 backup" # Switch back to the original branch git checkout feature/1234 # Pull the from remote (named 'origin'), thus 'repairing' our main problem git pull origin/feature/1234 # Now you have a clean-and-non-diverged branch and a backup of the local changes. # Check the needed files from the backup branch git checkout feature/1234-gone-bad -- the/path/to/file.php 

Bəlkə də bu, tez və təmiz bir qərar deyil və mənim hekayəmimi itirmişdim (1 əvəzi yerinə 5), amma gün işini davam etdirdi.

7
20 февр. Cavab verilir davisca 20 fevral. 2014-02-20 13:24 '14 at 13:24 pm 2014-02-20 13:24

Heç kəs sizin düzəlişinizi dəyişiklik etmədən çıxardığını --force-with-lease verin" --force-with-lease git push seçimini istifadə edin.

TortoiseGit-də "Push ..." "Force: maya ata bilər" parametrlərini və "bilinən dəyişiklikləri" yoxlayın.

Force (məlum dəyişiklikləri rədd edə bilir) uzaqdan təhlükəsiz, qeyri-sürətli keçid keçirməyə imkan verir. Bu, uzaq məntəqənin öz öhdəliklərini itirməsinə səbəb ola bilər; ehtiyatla istifadə edin. Bu, uzaqdan idarə olunan digər şəxslərdən bilinməyən dəyişikliklərin itirilməsinə mane ola bilər. Server filialının uzaqdan izləmə filialı (məlum dəyişikliklər) ilə eyni fiksasiya etdiyini yoxlayıb yoxlayır. Əgər belədirsə, güc bərk ediləcək. Əks təqdirdə, rədd ediləcəkdir. Gitin uzaqdan izləmə ilə etiket olmadığı üçün tags bu seçimi ilə yazıla bilməz.

3
07 июня '16 в 3:03 2016-06-07 03:03 Cavab ShawnFeatherly tərəfindən 07 İyun 2014 tarixində 3:03 2016-06-07 03:03 tarixində verilir

git commit --amend bitdikdən sonra dəyişiklik etmək üçün asan və təmiz bir yoldur git add "your files"

 git push origin master -f 

və ya

 git push origin master --force 
2
18 янв. Cavab Marwen Bkh 18 yanvar tərəfindən verilir . 2016-01-18 11:29 '16 'da 11:29' də 2016-01-18 11:29 'də

Uzaq şöbənin kodunu (GitHub / Bitbucket) bastırmadıysanız, aşağıda göstərildiyi kimi, əmr satırında olan mesajı dəyişə bilərsiniz.

  git commit --amend -m "Your new message" 

Müəyyən bir filialda işləyirsinizsə, aşağıdakıları edin:

 git commit --amend -m "BRANCH-NAME: new message" 

Yanlış mesajla kodunuzu artıq tıkladıysanız mesajı dəyişdirərkən diqqətli olmalısınız. Təqdim mesajı dəyişdikdən və yenidən basaraq cəhd etdiyinizdən sonra probleminiz var. Düzəliş etmək üçün bu addımları edin.

Bunu etmədən əvvəl bütün cavabı oxuyun.

 git commit --amend -m "BRANCH-NAME : your new message" git push -f origin BRANCH-NAME # Not a best practice. Read below why? 

Mühüm qeyd :. İğne basdığınızda, digər geliştiricilerin eyni filial üzerinde çalıştığı kod sorunlarıyla karşılaşabilirsiniz. Buna görə, bu münaqişələrin qarşısını almaq üçün, qüvvəyə basmadan kodunuzu şöbən çıxarmaq lazımdır:

  git commit --amend -m "BRANCH-NAME : your new message" git pull origin BRANCH-NAME git push -f origin BRANCH-NAME 

Bu, zəmanət verilmişsə, bir mesajı dəyişərkən ən yaxşı təcrübədir.

2
13 янв. Cavab Packer Jan 13 tərəfindən verilir 2015-01-13 10:20 '15 at 10:20 'da 2015-01-13 10:20

Git uzaqdan artıq zəhmət olmasa bu səhv alırsınız. Bunun üçün bir şöbəyə məcburi olaraq basın:

 git push -f origin branch_name 

Həmçinin, komandanın birinin bir filiala keçə biləcəyi üçün kodu uzaqdan çıxardığına əmin olun.

 git pull origin branch_name 

Bu bir uzaqdan bir düzəliş məcbur etmək lazımdır hallarda biridir.

1
21 янв. Cavab Praveen Dhawan Jan 21 tərəfindən verilir 2016-01-21 09:35 '16 'da 9:35' də 2016-01-21 09:35 'da

Uzaq bir repo çəkərək və yaranan birləşmə münaqişələrini düzəltmək, düzəltmək və sonra kliklə bu problemi həll etmək məcburiyyətindəyəm. Amma daha yaxşı bir yol olduğunu düşünürəm.

1
31 окт. cümə axşamı Spoike cavab verilir . 2008-10-31 14:39 '08 at 2:39 pm 2008-10-31 14:39

Mən yalnız Gitin dediyi şeyi edirdim. Beləliklə:

  • Bir düzəlişdən görə tıklaya bilmir.
  • Mən gözlədiyim kimi çalışıram.
  • Səhv birləşməsi mən əllə düzəltdim.
  • Yeni bir öhdəlik yaradın ("birləşməni" qeyd edin) və onu basın.
  • Görünür, işləyir!

Qeyd Tənzimlənən fiksasiya sonuncu idi.

1
02 дек. Cavab Rolf 02 Dekabr. 2016-12-02 19:29 '16 saat 19:29 'də 2016-12-02 19:29

haqqında digər suallar və ya bir sual soruşun