web-gelistirme-sc.com

Git birleştirme geri alma

develop branch
--> dashboard (working branch)

Tüm yukarı akış değişikliklerini gösterge panosunda birleştirmek için git merge --no-ff develop kullanıyorum

git günlüğü:

commit 88113a64a21bf8a51409ee2a1321442fd08db705
Merge: 981bc20 888a557
Author: XXXX <>
Date:   Mon Jul 30 08:16:46 2012 -0500

    Merge branch 'develop' into dashboard

commit 888a5572428a372f15a52106b8d74ff910493f01
Author: root <[email protected]>
Date:   Sun Jul 29 10:49:21 2012 -0500

    fixed end date edit display to have leading 0

commit 167ad941726c876349bfa445873bdcd475eb8cd8
Author: XXXX <>
Date:   Sun Jul 29 09:13:24 2012 -0500

Birliğin içinde 50'den fazla komisyon vardı ve ben birleştirme işlemini nasıl geri alacağımı merak ediyorum, böylece gösterge tablosu birleştirme durumuna geri dönüyor

Bunun ikinci kısmı, --no-ff ile birleştirme yapmazsam, 'Birleştirme şubesini' geliştir '' gösterge panosuna 'taahhüdünü alamıyorum. geri?

148
cgmckeever

Bir birleştirme taahhüdünün geri alınması, diğer sorular. 'da açıklanmıştır. Hızlı ileri alma birleştirme yaptığınızda, tanımladığınız ikincisi, önceki durumuna geri dönmek için git reset kullanabilirsiniz:

git reset --hard <commit_before_merge>

<commit_before_merge> ile git reflog, git log ile veya moxy hissediyorsanız (ve başka bir şey yapmadıysanız) bulabilirsiniz: git reset --hard [email protected]{1}

225
Christopher

Buradan:

http://www.christianengvall.se/undo-pushed-merge-git/

git revert -m 1 <merge commit hash>

Git geri alma işlemi, belirtilen işlemi geri alan yeni bir işlem ekler.

-M 1 kullanmak, bunun bir birleşme olduğunu ve ana daldaki üst işleme geri dönmek istediğimizi söyler. Geliştirme dalını belirtmek için -m 2'yi kullanırsınız.

89
sturrockad

Birleştirme işleminizi git reset --hard HEAD^ ile sıfırlayın.

--No-ff git kullanırsanız, aralarında hiçbir şey yapmamış olsanız bile her zaman bir birleştirme oluşturur. --No-ff git olmadan hızlı bir şekilde ileri gidersiniz, yani şubeleriniz birleştirilmiş şubenin HEAD 'in HEAD' ına ayarlanır. Bunu çözmek için, geri dönmek istediğiniz taahhüt kimliğini bulun ve git reset --hard $COMMITID.

15
Nico Erfurth

git reset -m 1 88113a64a21bf8a51409ee2a1321442fd08db705

git revert -m 1 88113a64a21bf8a51409ee2a1321442fd08db705

Ancak beklenmedik yan etkileri olabilir. git-scm.com/docs/git-revert içindeki --mainline parent-number seçeneğine bakın.

Belki de kaba ama etkili bir yol, bu taahhüdün sol üst öğesinin teslim alınması, tüm dosyaların bir kopyasının alınması, HEAD çıkışının tekrar yapılması ve tüm içeriğin eski dosyalar ile değiştirilmesi olabilir. O zaman git size ne geri çekildiğini söyleyecek ve kendi geri dönüş taahhüdünüzü oluşturacaksınız :)!

5
Jorge Orpinel