Mövcud, gözlənilməz əməlləri necə dəyişdirmək olar?

Təqdim mesajında ​​yanlış bir şey yazdım. Həm də bəzi faylları daxil etməyi unutdum.

Mesajı / faylları necə işlətmək olar? Təqdimat hələ başlamamışdır.

7676
07 окт. Laurie Young tərəfindən təyin olunmuş 07 Oct 2008-10-07 18:44 '08 at 18:44 2008-10-07 18:44
@ 27 cavab

Ən son törətdiyi mesaja dəyişikliklər

 git commit --amend -m "New commit message" 

... Bununla belə, bu, çox satırlı mesajlar və ya kiçik düzəlişlər daxil etmək daha çətin ola bilər.

Bunu etməzdən əvvəl, işlədilən surətdə heç bir dəyişikliyin olmadığını yoxlayın, əks halda onlar müəyyən olacaq. (Dəyişiklik edilməmişdir.)

Uzaq şöbəyə artıq göndərdiyiniz mesajı dəyişmək

Əgər zaten bir uzaq bir şubeye olan taahhüdünüzü itələyirsinizsə , o zaman zorla zorla vurmanız lazımdır :

SHA şəxsiyyətləri ilə əvəz edər, digər insanlar isə yenidən yazdığınız köhnə əməlləriniz varsa, problem yaradır.  Köhnə bir öhdəliyin bir nüsxəsi olan hər kəs işlərini yeni yazılmış bir işi ilə sinxronlaşdırmalıdır, bəzən çətin ola bilər, buna görə ümumi bir öhdəlik tarixini yenidən yazmağa cəhd edərkən başqaları ilə əlaqəli olduğunuzdan və ya ümumiyyətlə ümumi işlərin yenidən yazılmasından çəkinin. 


İnteraktiv rebazdan istifadə edin

Digər seçim isə interaktiv rebaza istifadə etməkdir.
Bu, son mesaj olmasa belə, yeniləmək istədiyiniz hər hansı bir mesajı redaktə etməyə imkan verir.

Go squash etmək üçün aşağıdakı adımları edin:

 // X is the number of commits to the last commit you want to be able to edit git rebase -i HEAD~X 

Sənin əməllərinizi sarsıdan kimi mesajı redaktə etmək üçün e/r seçin.

2019

07 окт. Cavab 07-də EfForEffort verilir . 2008-10-07 18:50 '08 saat 06:50 'da 2008-10-07 18:50
2438
08 февр. Cavab lfx_cool verildi 08 fevral. 2010-02-08 07:26 '10 saat 07:26 'da 2010-02-08 07:26

Düzeltmek istediğiniz düzeltme son deyil:

  • git rebase --interactive $parent_of_flawed_commit

    Bir neçə yanlış əməlləri düzəltmək istəyirsinizsə, ən qədim kodun ana kodunu verin.

  • Verdiyinizdən bəri bütün redaksiyaların siyahısı ilə bir redaktor görünür.

    • edit istənilən düzəlişlərdən əvvəl reword (və ya reword köhnə versiyasını edit ) pick dəyişin.
    • Kaydedildikten sonra, Git, listelenen görevleri tekrarlayacaktır.

  • Təkrar etmək istədiyiniz hər bir əmr üçün, Git sizi redaktorunuza qaytaracaq. Git dəyişiklik etmək istədiyin hər bir öhdəlik üçün sizi qabığa qoyur. Əgər qabıqda olsanız:

    • Təsirini hər hansı bir şəkildə dəyişdirin.
    • git commit --amend
    • git rebase --continue

Bu ardıcıllığın əksəriyyəti yolda müxtəlif komanda çıxışları ilə sizə izah ediləcək. Onun çox asan, onu yadda saxlamaq lazım deyil - yalnız git rebase --interactive , nə qədər uzun olursa olsun düzəltmək üçün imkan verir unutmayın.


Zaten basmış olduğunuz taahhütlerinizi değiştirmek istemediğinizi unutmayın. Və ya bəlkə də olacaqsınız, ancaq bu vəziyyətdə, əməllərinizi çıxardı və onlardan üstün iş görmüş ola biləcək hər kəslə ünsiyyət qurmağa böyük diqqət yetirməliyik. Kimsə, bir rebase sürükledikten və ya nəşr edilmiş bir işə sıfırlanandan sonra yenidən bərpa etmək üçün necə?

2321
07 окт. Cavab Aristotle Pagaltzis tərəfindən verilir 07 oktyabr 2008-10-07 22:52 '08 at 22:52 pm 2008-10-07 22:52

Bir əvvəlki tövsiyələrə dəyişiklik etmək üçün lazımi dəyişikliklər edin və bu dəyişiklikləri edin və sonra işləyin

 git commit --amend -C HEAD 

Əvvəlki tövsiyəni düzəltmək üçün, tamamilə aradan qaldırın

 git rebase -i HEAD~ commit_count 

( Change_count dəyişdirmək istədiyiniz əmri sayını dəyişin.) Bu komut sizin redaktoru işə salır . İlk təyinatını (dəyişdirmək istədiyiniz birini) "seçin" əvəzinə "redaktə et" kimi qeyd edin və redaktordan çıxın və çıxın. Təqdirmək istədiyiniz dəyişiklikləri edin və sonra işləyin

758
16 авг. Cavab Fatih 16 aug tərəfindən verilir . 2011-08-16 00:20 '11 'də 0:20' da 2011-08-16 00:20

Qeyd edildiyi kimi, git commit --amend - git commit --amend üzərində yazmaq üçün bir vasitədir. Bir qeyd: faylları yenidən yazmaq istəyirsinizsə, əmr olacaq

390
07 июня '11 в 0:16 2011-06-07 00:16 cavab 07 iyun 'da 0:16' da 0:16 2011-06-07 00:16 tarixində verilir

Bunun üçün də keç filter-branch filialundan istifadə edə bilərsiniz.

351
01 сент. Cavab Mark 01 Sep 2012-09-01 23:35 '12 at 23:35 2012-09-01 23:35

Mən bu şəkildə üstünlük verirəm.

 git commit --amend -c <commit ID> 

Əks təqdirdə, yeni törətdiyi şəxsiyyət vəsiqəsi ilə yeni bir öhdəlik olacaq.

312
10 янв. Krevedko tərəfindən verilmiş cavab 10 yanvar 2013-01-10 17:23 '13 at 17:23 2013-01-10 17:23

Git GUI aracını istifadə etsəniz, sonuncu sonuncu tövsiyə adlı bir düğme var. Bu düyməni klikləyin və ən son yekun faylları və mesajınızı göstərin. Sadəcə bu mesajı redaktə edin və yeni bir mesaj göndərməklə onu düzəldə bilərsiniz.

Və ya bu əmri konsol / terminaldan istifadə edin:

 git commit -a --amend -m "My new commit message" 
309
08 нояб. Cavab Əhilraj NS 08 noyabrda verilir. 2012-11-08 06:51 '12 saat 06:51 'da 2012-11-08 06:51

Go rebasing istifadə edə bilərsiniz. Məsələn, bbc643cd işlətmək üçün geri qayıtmaq istəyirsinizsə, işləyin

 $ git rebase bbc643cd^ --interactive 

Varsayılan redaktorda dəyişiklik etmək istəyən xəttdə 'redaktə etmək' üçün 'seçin' dəyişdirin. Dəyişikliklər edin və sonra onları icra et

 $ git add <filepattern> 

İndi istifadə edə bilərsiniz

 $ git commit --amend 

törətməyi dəyişdirmək və bundan sonra

 $ git rebase --continue 

əvvəlki hissəyə qayıtmaq üçün.

282
22 янв. Cavab Şoaib Ud-Din tərəfindən verilir 22 Yanvar 2013-01-22 20:23 '13 saat 20:23 'da 2013-01-22 20:23
  • Sonuncu mesajı dəyişmək istəyirsinizsə, aşağıdakı adımları edin:

     git commit --amend 

    Bu, sizin mətn redaktoru və sizə tövsiyənin son mesajını dəyişməyə imkan verir.

  • Son 3 əmr mesajını və ya hər hansı bir mesajı bu nöqtəyə dəyişmək istəyirsinizsə, HEAD~3 git rebase -i :

     git rebase -i HEAD~3 
275
22 окт. Heena Hussain tərəfindən verilmiş cavab 22 oktyabr 2012-10-22 14:22 '12 at 2:22 pm 2012-10-22 14:22

Bir neçə şöbəyə köhnə mesajı dəyişməlisiniz (yəni, bir neçə filialda səhv mesajı olan bir mesaj var) istifadə edə bilərsiniz:

256
15 нояб. Cavab 15 noyabr tarixində sebers tərəfindən verilir . 2012-11-15 12:29 '12 at 12:29 2012-11-15 12:29

istifadə

 git commit --amend 

Bunu ətraflı şəkildə anlamaq üçün, əla bir mesaj 4. Git tarixinin üzərində yaz . Bu da git commit --amend istifadə etməmək üçün sizə deyir.

221
27 марта '13 в 23:43 2013-03-27 23:43 cavab 27 mart '13 'də saat 23:43' də verildi . 2013-03-27 23:43

Düzəliş edin

Bir neçə variantınız var. Bunu edə bilərsiniz

 git commit --amend 

sonunadək icra ediləcək.

İnteraktiv redirection

Əks təqdirdə, bu sizin son törətməyiniz deyilsə, interaktiv bir yenidən başladın,

 git rebase -i [branched_from] [hash before commit] 

Sonra interaktiv redirection daxilində, sadəcə bu tövsiyə bir redaktə əlavə edin. Bu meydana gəldikdə, git commit --amend və dəyişin. Bu fiksasiya nöqtəsinə geri dönmək istəyirsinizsə, go git reflog istifadə edə bilərsiniz və sadəcə bu düzeltmeyi silin. Sonra yenidən git commit .

195
18 янв. Cavab 18 yanvar Wallerjake verilir 2013-01-18 04:45 '13 saat 04:45 'da 2013-01-18 04:45

Git GUI istifadə etsəniz, tıklanmayan sonuncu işi dəyişə bilərsiniz:

 Commit/Amend Last Commit 
183
01 дек. Cavab gulchrider tərəfindən verilir 01 Dekabr. 2012-12-01 08:03 '12 at 8:03 2012-12-01 08:03

Bu sizin son əməlinizdirsə, sadəcə tövsiyəni düzəldin :

 git commit --amend -o -m "New commit message" 

(yalnız --only əmin olmaq üçün -o ( --only ) bayraqdan istifadə edin)


Bir öhdəlik kimi görünsə, inanılmaz interaktiv rebaza istifadə edin:

 git rebase -i @~9 # Show the last 9 commits in a text editor 

İstədiyiniz işi tapın, r ( reword ) pick dəyişin və faylını reword bağlayın. Bitti!



Miniatür tutorial vim (və ya, yalnız 8 3j cw 3j cw r Esc ZZ yenidən necə):

  • vimtutor varsa, vimtutor çalıştırın.
  • h j k l naviqasiya düymələrinə cavab verir
  • Bütün əmrlər məsələn bir sıra prefiksinə malik ola bilər. 3j 3 3j keçir
  • i , əlavə rejiminə daxil olmaq üçün - daxil etdiyiniz mətn faylda görünür
  • Esc və ya Ctrl c daxil rejimindən çıxmaq və normal rejimə qayıdır.
  • u ləğv etmək
  • Təkrarlamaq üçün Ctrl r
  • dd , dw , dl , bir xətt, söz və ya məktubu silin
  • cc , cw , cl bir xətt, söz və ya məktubu dəyişdirmək üçün müvafiq olaraq ( dd i ilə eyni)
  • yy , yw , yw (" yw ") xətləri, sözləri və ya məktubları
  • p və ya p , cari vəziyyətdən əvvəl və ya əvvəlcədən yerləşdirilməlidir
  • :w Fayl yazmaq üçün daxil edin
  • :q! Kaydetmədən çıxış edin
  • :wq Daxil :wq və ya :wq saxlamaq və çıxmaq

Bir çox mətni düzəldirsinizsə, Dvorak klaviatura planına keçin, toxunma növü öyrən və vim öyrən. Səylərə dəyər mi? Bəli



ProTip ™: tarixini yenidən yazan "təhlükəli" əmrlərlə sınaqdan çəkinməyin * - Git 90 gün ərzində düzəlişlərinizi default olaraq silmir; Bunları reflogda tapa bilərsiniz:

 $ git reset @~3 # go back 3 commits $ git reflog c4f708b HEAD@{0}: reset: moving to @~3 2c52489 HEAD@{1}: commit: more changes 4a5246d HEAD@{2}: commit: make important changes e8571e4 HEAD@{3}: commit: make some changes ... earlier commits ... $ git reset 2c52489 ... and you're back where you started 

* Belə məlumatların --hard baxmayaraq - --hard--hard kimi parametrlərdən çəkinin.
* Həm də əməkdaşlıq etdiyiniz hər hansı bir sahədə tarixi yazmayın.

170
10 февр. Cavab Zaz verildi 10 fevral. 2015-02-10 03:01 '15 at 3:01 2015-02-10 03:01

Git GUI-dən istifadə etdiyim qədər istifadə edirəm və bu son mesajı dəyişdirmək imkanı verir:

2019

165
05 авг. cavab Cavard Qraff 05 aug tərəfindən verilir . 2013-08-05 02:13 '13 da 2:13 2013-08-05 02:13

Vay, bunun üçün bir çox yol var.

Bunu etmək üçün bir başqa yol da son işi silməkdir, amma dəyişikliklərinizi işinizi itirməyin. Daha sonra düzəldilmiş bir mesajla başqa bir əməl edə bilərsiniz. Bu kimi bir şeyə baxacaq:

135
03 дек. Cavab Radu Murzea tərəfindən verildi 03 dekabr . 2013-12-03 00:31 '13 'da 0:31' da 2013-12-03 00:31

Təqdimatın sonuncu istifadəsini dəyişdirmək istəyirsinizsə:

 git commit --amend 

və ya

124
07 янв. Shubham Chaudhary tərəfindən verilmiş cavab 07 Jan 2014-01-07 01:03 '14 saat 01:03 2014-01-07 01:03

Windows / Mac üçün köhnə mesajların redaktə edilməsinə kömək etmək üçün qrafik istifadəçi interfeysi axtaranlar üçün (yəni, ən son mesaj deyil) mən SourceTree'yi təklif edirəm . Aşağıdakıları izləmək üçün addımlar.

2019

123
06 нояб. Cavab Steve Chambers tərəfindən Nov 06 tərəfindən verilir 2014-11-06 18:01 '14 at 18:01 2014-11-06 18:01

Sonuncu mesajı dəyişdirmək --only , - --only bayraqdan və ya -o qısa --only istifadə etməlisiniz - commit --amend :

122
23 мая '14 в 11:40 2014-05-23 11:40 23 May 'da, David Ongaro'ya 11:40' də cavab verdi 2014-05-23 11:40

Son bir səhv başlığını bir satırda yeni bir mesajla yeniləyin:

 # You can reset your head to n number of commit # NOT a good idea for changing last commit message # but you can get an idea to split commit into multiple commits git reset --soft HEAD^ # it will reset you last commit. Now, you # can re-commit it with new commit message. 

Daha kiçik əməllərə əməlləri ayırmaq üçün sıfırlama istifadə edin.

git reset bir neçə öhdəliyə bir öhdəlik pozmağa kömək edə bilər:

99
22 янв. Cavab 22 yanvarda przbadu verilir 2014-01-22 11:57 '14 da 11:57 2014-01-22 11:57

Bu suala bir çox cavab var, amma heç biri, VIM ilə köhnə fiksasiya mesajlarını necə dəyişdirməyi ətraflı izah edir. Özümü etməyə çalışdığım takılıyorum, buna görə də xüsusilə VIM-də təcrübəsi olmayan insanlar üçün bunu necə edəcəyimi ətraflı izah edəcəyəm!

Mən artıq serverə basdığım son beş əmrimi dəyişmək istəmişdim. Başqası çıxardığı təqdirdə olduqca "təhlükəli" bir şeydir, öhdəlik mesajlarını dəyişdirərək şeylərə zərər verə bilərsiniz. Ancaq, kiçik şöbünüzdə işləyərkən və heç kim onu ​​çəkmədiyinə əmin olduğunuz halda onu dəyişə bilərsiniz:

Son beş əmrinizi dəyişdirməyi düşündükdən sonra terminala daxil edin:

git rebase -i HEAD~5 * git rebase -i HEAD~5 harada dəyişiklik etmək istədiyiniz mesajların sayıdır. (belə ki, sonuncu törətmənin 10-cu hissəsini dəyişmək istəyirsinizsə, 10-ə daxil edin)

Bu əmr sizi VİM-ə yönəldəcək. Son 5 əmrini yuxarıdan görəcəksiniz:

pick <commit hash> commit message

Seçim əvəzinə söz yazmaq lazımdır. Sizi INSERT-rejiminə daxil etməyə məcbur edən i yazaraq bunu edə bilərsiniz. (Aşağıdakı INSERT sözü ilə əlavə rejimində olduğunuzu görə bilərsiniz). Tövsiyələr üçün, sözü pick əvəzinə, sözü dəyişdirmək istəyirsən

Sonra bu ekranı saxlamaq və çıxmaq lazımdır, bunu əvvəlcə esc düyməsini basaraq komanda rejiminə keçməklə yerinə yetirirsiniz. (INSERT sözü aşağıda yoxdursa, komanda rejimində olduğunuzu yoxlaya bilərsiniz). Sonra yazaraq bir əmr daxil edə bilərsiniz : Saxla və çıxış komutu wq . Buna görə :wq youre ont, o doğru olacaq.

Sonra VIM yenidən yazmaq istədiyiniz hər hansı bir mesaj göndərir, burada həqiqətən mesajı dəyişə bilərsiniz. Bunu INSERT-rejiminə keçirərək, mesajı dəyişən, komanda rejiminə girən və qənaət və bağlanma üsulunu istifadə edərsiniz. Bunu 5 dəfə et və VİM-dən çıxma!

Daha sonra, əgər zaten yanlış əməllərinizi git push --force bunları yazmaq git push --force lazımdır. git push --force yadda saxlayın - git push --force bir şeydir, belə ki, səhv əməllərinizi basdığınız üçün heç bir serverdən çəkilməmiş olduğundan əmin olun!

İndi mesajınızı tamamladıq.

(Gördüyünüz kimi, mən VIM-də təcrübəli deyiləm, buna görə də mən baş verənləri izah etmək üçün səhv "arqument" istifadə etsəm, məni düzəltməyə can atın!)

82
07 авг. Cavab Marijn 07 avqustda verilir . 2014-08-07 12:18 '14 at 12:18 2014-08-07 12:18

Siz git-rebase-reword istifadə edə bilərsiniz

Hər hansı bir commit --amend (yalnız sonuncu deyil) təşkil etmək üçün nəzərdə tutulmuşdur

 $ git rebase-reword <commit-or-refname> 

Он назван в честь действия по интерактивной переадресации, чтобы исправить фиксацию: "изменить". См. этот пост и man -section interactive mode-

Nümunələr:

 $ git rebase-reword b68f560 $ git rebase-reword HEAD^ 
76
ответ дан albfan 21 февр. '15 в 15:21 2015-02-21 15:21

Я добавил псевдоним reci , recm для recommit (amend) it, теперь я могу сделать это с помощью git recm или git recm -m .

 $ vim ~/.gitconfig [alias] ...... cm = commit reci = commit --amend recm = commit --amend ...... 
76
ответ дан Chu-Siang Lai 06 янв. '14 в 10:24 2014-01-06 10:24

Я понял, что я нажал на фиксацию с опечаткой. Чтобы отменить, я сделал следующее:

55
ответ дан neoneye 19 июля '14 в 20:27 2014-07-19 20:27

Мне нравится использовать следующее:

  • git status
  • git add --all
  • git commit -am "message goes here about the change"
  • git pull <origin master>
  • git push <origin master>
49
ответ дан Kedar Adhikari 08 сент. '14 в 12:14 2014-09-08 12:14

Если вы не нажали код на удаленную ветку ( GitHub / Bitbucket ) вы можете изменить сообщение коммита в командной строке, как показано ниже.

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

Если вы работаете с определенной веткой, выполните следующее:

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

Если вы уже нажали на код с неправильным сообщением, и вам нужно быть осторожным при изменении сообщения. То есть, после того, как вы измените сообщение коммита и попробуйте нажать его снова, у вас возникнут проблемы. Чтобы сделать его гладким, выполните следующие действия.

Пожалуйста, прочтите мой весь ответ, прежде чем делать это.

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

Важное примечание: . Когда вы используете принудительное нажатие, вы можете столкнуться с проблемами кода, которые другие разработчики работают над одной ветвью. Чтобы избежать этих конфликтов, вам нужно вытащить код из своей ветки, прежде чем нажимать force :

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

Это наилучшая практика при изменении сообщения фиксации, если оно уже было нажато.

43
ответ дан Prabhakar 13 янв. '15 в 10:03 2015-01-13 10:03

Другие вопросы по меткам или Задайте вопрос