Git Rebase'i geri alma


Al─▒nan cevaba git


Git rebase kolayca nas─▒l geri al─▒naca─č─▒n─▒ bilen var m─▒?

Akla gelen tek yol elle gitmek.

  • git her iki ┼čubeye taahh├╝t ana babaya ├Âdeme
  • sonra oradan ge├žici bir ┼čube olu┼čturun
  • T├╝m komisyonlar─▒ elden teslim almak
  • el ile olu┼čturulan dal taraf─▒ndan yeniden olu┼čturdu─čum dal─▒ de─či┼čtir

┼×u anki durumumda bu i┼če yarayacak ├ž├╝nk├╝ her iki ┼čubeden de kolayca karar verebiliyorum (biri e┼čyalar─▒m di─čeri i┼č arkada┼č─▒m─▒n e┼čyalar─▒yd─▒).

Ancak benim yakla┼č─▒m─▒m bana yetersiz ve hataya e─čilimli davran─▒yor (diyelim ki kendi ┼čubelerimin 2'si ile yeniden do─čdum).

Herhangi bir fikir?

A├ž─▒klama: Bir dizi komisyonun tekrar oynat─▒ld─▒─č─▒ yeniden yap─▒lanma hakk─▒nda konu┼čuyorum. Sadece bir tane de─čil.


2916









Cevap say─▒s─▒n─▒ say: 18






En kolay yol, yeniden yap─▒lanma reflogda ba┼člamadan hemen ├Ânce oldu─ču gibi ┼čubenin ba┼č taahh├╝tlerini bulmakt─▒ ...

 git reflog
 

ve ge├žerli dal─▒ ona s─▒f─▒rlamak i├žin (se├ženekle s─▒f─▒rlamadan ├Ânce kesinlikle emin olmak konusunda ola─čan uyar─▒lar ile --hard ).

Eski taahh├╝d├╝n [email protected]{5} ref g├╝nl├╝─č├╝nde oldu─čunu varsayal─▒m :

 git reset --hard [email protected]{5}
 

Windows'ta referans─▒ teklif etmeniz gerekebilir:

 git reset --hard "[email protected]{5}"
 

Sadece eski ba┼čkan─▒ aday─▒n─▒n tarihini kontrol ederek kontrol edebilirsiniz git log [email protected]{5} ( Windows :) git log "[email protected]{5}" .

┼×ube yenilemeleri ba┼č─▒na devre d─▒┼č─▒ b─▒rak─▒lmad─▒ysan─▒z, yeniden ba┼člayabilmeniz i├žin git reflog [email protected]{1} ┼čube ba┼č─▒n─▒ son kafaya yeniden ba─člamadan ├Ânce ay─▒rd─▒─č─▒ i├žin yapman─▒z gerekir . Bunu yak─▒n zamanda do─črulamad─▒─č─▒m halde, bunu iki kez kontrol ederdim.

Varsay─▒lan olarak, t├╝m refloglar ├ž─▒plak olmayan depolar i├žin aktive edilmi┼čtir:

 [core]
    logAllRefUpdates = true
 

3989







Asl─▒nda, rebase ba┼člang─▒├ž ÔÇőÔÇőnoktan─▒z─▒ kaydeder, ORIG_HEAD b├Âylece bu genellikle ┼ču kadar basittir:

 git reset --hard ORIG_HEAD
 

Ancak reset , rebase ve merge t├╝m orijinal tasarrufu HEAD i├žine pointer ORIG_HEAD b├Âylece, size reflog kullanmak gerekecektir sonra geri almak i├žin ├žal─▒┼č─▒yoruz rebase bu yana bu komutlar─▒n herhangi yapt─▒ysan─▒z.


1406







Charles'─▒n cevab─▒ i┼če yar─▒yor ama bunu yapmak isteyebilirsiniz:

 git rebase --abort
 

sonra temizlemek i├žin reset .

Aksi takdirde ÔÇť Interactive rebase already started ÔÇŁ mesaj─▒n─▒ alabilirsiniz .


359







git reflog rebase i┼čleminden ├Ânceki ve sonraki t├╝m de─či┼čiklikleri g├Âsterir ve s─▒f─▒rlanacak do─čru olan─▒ bulman─▒za izin verir. Ama kimsenin buradaki di─čer s├╝per basit yoldan hen├╝z bahsetmedi─čine ┼ča┼č─▒rd─▒m:

Ayr─▒ca, daha ├Ânce de belirtildi─či gibi, rebase eski durumu oldu─ču gibi b─▒rak─▒r ORIG_HEAD , b├Âylece ├žal─▒┼čt─▒rarak son rebase'i geri alabilirsiniz:

 git reset --hard ORIG_HEAD
 

109







┼×ubeyi eski ucunun sarkan alay konusu haline getirmek elbette en iyi ├ž├Âz├╝md├╝r, ├ž├╝nk├╝ herhangi bir ├žaba harcamadan ├Ânceki durumu geri y├╝kler. Ancak bu taahh├╝tleri kaybettiyseniz (├Ârne─čin, bu s├╝re zarf─▒nda depolar─▒n─▒z─▒ ├ž├Âp toplad─▒─č─▒n─▒z i├žin veya bu taze bir klondur), ┼čubeyi her zaman yeniden a├žabilirsiniz. Bunun anahtar─▒ --onto anahtard─▒r.

Let Diyelim ki yarat─▒c─▒ ad─▒nda bir konu dal─▒ vard─▒ ki topic kapal─▒ kollara oldu─čunu, master ucu ne zaman master oldu 0deadbeef i┼člemek. Daldayken bir noktada topic sen yapt─▒n git rebase master . ┼×imdi bunu geri almak istiyorsun. ─░┼čte nas─▒l:

 git rebase --onto 0deadbeef master topic
 

Bu, a├ž─▒k topic olmayan t├╝m taahh├╝tleri ├╝stlenecek master ve ├╝st├╝ne yazacak 0deadbeef .

─░le --onto ge├žmi┼činizi hemen hemen her ┼čekilde yeniden d├╝zenleyebilirsiniz .

─░yi e─členceler. :-)


84







Ger├žekten ├Ânemsiz bir i┼člem yapmadan ├Ânce dalda bir yedekleme etiketi koydum (├žo─ču rebas ├Ânemsizdir, ancak karma┼č─▒k bir yere bakarsa bunu yapar─▒m).

O zaman, geri y├╝kleme kadar kolayd─▒r git reset --hard BACKUP .


68







Durumunda uzaktan depoya ┼čube itilmi┼č olan ((genellikle 's k├Âkenli) ve sonra (birle┼čtirme olmadan) ba┼čar─▒l─▒ bir rebase yapt─▒k git rebase --abort kolayca yapabilirsiniz "Hay─▒r s├╝r├╝yor rebase" verir) s─▒f─▒rlama ┼čube komutunu kullanarak:

git reset - ├ž─▒k─▒┼č noktas─▒ / {branchName}

├ľrnek:

 $ ~/work/projects/{ProjectName} $ git status
On branch {branchName}
Your branch is ahead of 'origin/{branchName}' by 135 commits.
  (use "git push" to publish your local commits)

nothing to commit, working directory clean

$ ~/work/projects/{ProjectName} $ git reset --hard origin/{branchName}
HEAD is now at 6df5719 "Commit message".

$ ~/work/projects/{ProjectName} $ git status
On branch {branchName}
Your branch is up-to-date with 'origin/{branchName}.

nothing to commit, working directory clean
 

60







Yeniden doldurma i┼člemini tamamlamad─▒ysan─▒z ve ortas─▒nda, a┼ča─č─▒dakiler i┼če yarar:

 git rebase --abort
 

52


2014-10-15





Kullanmak reflog benim i├žin i┼če yaramad─▒.

Benim i├žin i┼če yarayanlar burada anlat─▒lanlara benziyordu . Dosyay─▒, yeniden a├ž─▒lm─▒┼č dal─▒n ad─▒n─▒ ta┼č─▒yan .git / logs / refs klas├Âr├╝nde a├ž─▒n ve ┼č├Âyle bir "rebase finsihed" i├žeren sat─▒r─▒ bulun:

 5fce6b51 88552c8f Kris Leech <[email protected]> 1329744625 +0000  rebase finished: refs/heads/integrate onto 9e460878
 

Sat─▒rda listelenen ikinci i┼čleme g├Âz at─▒n.

 git checkout 88552c8f
 

Bunun bir kez do─črulan─▒p onaylanmad─▒─č─▒n─▒ ve dalland─▒─č─▒m─▒ ve bir rahatlama sa─člad─▒─č─▒m─▒ onaylad─▒m.

 git log
git checkout -b lost_changes
 

19


2012-02-20





Birden fazla taahh├╝t i├žin, herhangi bir taahh├╝d├╝n, bu taahh├╝de yol a├žan t├╝m tarihlere at─▒fta bulundu─čunu unutmay─▒n. Yani Charles'─▒n cevab─▒nda, "eski taahh├╝tleri" "eski taahh├╝tlerin en yenisi" olarak okuyun. Bu taahh├╝de s─▒f─▒rlarsan─▒z, bu taahh├╝de giden t├╝m tarih yeniden g├Âr├╝necektir. Bu istedi─čini yapmal─▒.


16







@Allan ve @ Zearin'in ├ž├Âz├╝m├╝n├╝n ard─▒ndan, bir yorum yapabilmeyi isterdim, ancak yeterince itibar g├Ârmedim, bu y├╝zden a┼ča─č─▒daki komutu kulland─▒m:

Yerine yapman─▒n git rebase -i --abort (not -i ) Ben sadece yapmak zorunda git rebase --abort ( olmadan -i ).

Hem kullanma -i ve --abort Git ayn─▒ anda neden bana kullan─▒m─▒ / se├ženeklerin listesini g├Âstermek i├žin.

Yani bu ├ž├Âz├╝mle ├Ânceki ve ┼čimdiki ┼čube durumum:

 [email protected] /my/project/environment (branch-123|REBASE-i)
$ git rebase --abort

[email protected] /my/project/environment (branch-123)
$
 

11







Uzak dallara kar┼č─▒ ba┼čar─▒l─▒ bir ┼čekilde yeniden do─čduysan─▒z ve git rebase --abort hala yapam─▒yorsan─▒z, ├žal─▒┼čman─▒z─▒ kurtarmak i├žin baz─▒ hileler yapabilirsiniz ve zorla itti. Yanl─▒┼čl─▒kla yeniden do─čmu┼č olan ┼čubenizin ├ža─čr─▒ld─▒─č─▒n─▒ your-branch ve takip edildi─čini varsayal─▒m. origin/your-branch

  • git branch -m your-branch-rebased # ge├žerli ┼čubeyi yeniden adland─▒r
  • git checkout origin/your-branch K├Âkeni bilinen son durumuna # ├Âdeme
  • git checkout -b your-branch
  • eksik olan komisyonlar─▒ kontrol et git log your-branch-rebased , kar┼č─▒la┼čt─▒r git log your-branch ve tan─▒mla your-branch
  • git cherry-pick COMMIT_HASH her taahh├╝tte i├žin your-branch-rebased
  • de─či┼čikliklerinizi zorlay─▒n. L├╝tfen iki yerel ┼čubenin ili┼čkili oldu─čunu remote/your-branch ve yaln─▒zca itmeniz gerekti─čini unutmay─▒n your-branch

11







Diyelim ki uzmanl─▒k dal─▒m─▒n ├╝ss├╝n├╝ yeniden yap─▒yorum ve bir ┼čeyleri k─▒ran 30 yeni komisyon al─▒yorum. K├Ât├╝ taahh├╝tleri ortadan kald─▒rman─▒n en kolay yolu oldu─čunu genellikle buldum.

 git rebase -i HEAD~31
 

Son 31 taahh├╝t i├žin etkile┼čimli yeniden fiyatland─▒rma (├žok fazla se├žim yaparsan─▒z zarar vermez).

Kurtulmak istedi─činiz taahh├╝tleri alman─▒z ve basit├že "pick" yerine "d" ile i┼čaretlemeniz yeterlidir. ┼×imdi, yeniden yap─▒lanma i┼čleminden vazge├žme i┼člemi etkin bir ┼čekilde silinir (yeniden olu┼čturma s─▒ras─▒nda yaln─▒zca ald─▒─č─▒n─▒z taahh├╝tleri kald─▒r─▒rsan─▒z).


4







Yeni ba┼člayanlar / sert s─▒f─▒rlama yapmaktan ├žok korkan herhangi biri i├žin, reflogdaki i┼člemi kontrol edebilir ve ard─▒ndan yeni bir ┼čube olarak kaydedebilirsiniz.

 git reflog
 

Yeniden do─čmaya ba┼člamadan hemen ├Ânce taahh├╝d├╝ bulun. Bulmak i├žin a┼ča─č─▒ya do─čru kayd─▒rman─▒z gerekebilir (Enter veya PageDown'a bas─▒n). HEAD numaras─▒n─▒ not al─▒n ve 57'yi de─či┼čtirin:

 git checkout [email protected]{57}
 

┼×ubeyi / taahh├╝tleri inceleyin, iyi g├Âr├╝n├╝yorsa, bu HEAD'i kullanarak yeni bir ┼čube olu┼čturun:

 git checkout -b new_branch_name
 

3







E─čer bir daldaysan─▒z, a┼ča─č─▒dakileri kullanabilirsiniz:

 git reset --hard @{1}
 

Sadece HEAD (taraf─▒ndan elde edilen git reflog ) i├žin bir referans g├╝nl├╝─č├╝ yoktur, ayr─▒ca her dal i├žin (taraf─▒ndan elde edilen git reflog <branch> ) refloglar da vard─▒r . Yani, ├╝zerinde ise master o zaman git reflog master o alan─▒n t├╝m de─či┼čiklikleri listeler. Sen taraf─▒ndan bu de─či┼čikliklere ba┼čvurabilir [email protected]{1} , [email protected]{2} vb

git rebase genellikle HEAD'i birden ├žok kez de─či┼čtirir, ancak ge├žerli dal yaln─▒zca bir kez g├╝ncellenir.

@{1} sadece bir ak─▒m ┼čube i├žin k─▒sayol bunun e┼čit y├╝zden, [email protected]{1} bir b├╝t├že ise master .

git reset --hard ORIG_HEAD git reset etkile┼čimli s─▒ras─▒nda kulland─▒ysan─▒z ├žal─▒┼čmaz rebase .


1







Genelde yapt─▒─č─▒m ┼čey git reset #commit_hash

Rebase'in etkisinin olmad─▒─č─▒n─▒ d├╝┼č├╝nd├╝─č├╝m son s├Âz├╝me.

sonra git pull

┼×imdi ┼čubeniz ayn─▒ usta gibi e┼čle┼čmeli ve rebased komisyonlar i├žinde olmamal─▒d─▒r.

┼×imdi kimse bu daldaki komisyonlar─▒ kirazl─▒ se├žebilir.


1







git reset - ├ž─▒k─▒┼č noktas─▒ / {branchName}

rebase taraf─▒ndan yap─▒lan t├╝m yerel de─či┼čikliklerinizi s─▒f─▒rlamak i├žin do─čru ├ž├Âz├╝md├╝r.


-2







Git rebase i├žinde bir ┼čeyi kar─▒┼čt─▒r─▒rsan─▒z, ├Ârne─čin git rebase --abort , kabul edilmemi┼č dosyalar─▒n─▒z varken, kaybolurlar ve git reflog yard─▒mc─▒ olmazlar. Bu bana oldu ve burada kutunun d─▒┼č─▒nda d├╝┼č├╝nmek gerekir. E─čer benim gibi ┼čansl─▒ysan─▒z ve IntelliJ Webstorm'u kullan─▒yorsan─▒z right-click->local history , versiyonlama yaz─▒l─▒m─▒ ile yapt─▒─č─▒n─▒z hatalardan ba─č─▒ms─▒z olarak dosya / klas├Ârlerinizin ├Ânceki durumuna geri d├Ânebilirsiniz. Ba┼čka bir ar─▒zaya kar┼č─▒ koruman─▒n ├žal─▒┼čmas─▒ her zaman iyidir.


-3