Önceki bir taahhüdü birden fazla işleme ayırma


1224

Bir şube oluşturmadan ve yeni bir şube üzerinde bir sürü korkak iş yapmadan, yerel depoya atandıktan sonra birkaç farklı taahhüde tek bir taahhütte bulunmak mümkün müdür?


36
Bunun nasıl yapılacağını öğrenmek için iyi bir kaynak " Gitmeyi Bölmek " bölümündeki Pro Git §6.4 Git Tools - Yeniden Yazma Geçmişidir .

2
Yukarıdaki yorumda yer alan dokümanlar mükemmel, aşağıdaki cevaplardan daha iyi açıklanmış.
Blaisorblade

2
Bu takma adın stackoverflow.com/a/19267103/301717 kullanılmasını öneririm . git autorebase split COMMIT_ID
Jérôme Pouiller

Etkileşimli bir rebase olmadan yapılacak en kolay şey, (muhtemelen) bölmek istediğiniz bölümden önce yeni bir şube yapmak, kiraz-seçim-taahhüt, sıfırlama, saklamak, dosya taşıma işlemini tamamlamak, saklamayı yeniden uygulamak ve değişiklikleri yapın ve ardından eski şubeyle birleştirin veya takip eden taahhütleri kirazla alın. (Daha sonra eski şube adını mevcut başlığa geçirin.) (MBO'ların tavsiyelerine uymak ve etkileşimli bir rebase yapmak muhtemelen daha iyidir.) (Aşağıdaki 2010 yanıtından kopyalanmıştır)
William Pursell

1
Daha önceki bir taahhütte bir geri ödeme sırasında iki komisyonu yanlışlıkla ezdikten sonra bu sorunla karşılaştım. Bunu düzeltmek için Benim yöntemim taahhüt ezilmiş, ödeme oldu git reset HEAD~, git stashardından git cherry-pickilk önce, squash içinde taahhüt git stash pop. Benim kiraz toplama durum burada oldukça özgü olmakla git stashve git stash popdiğerleri için oldukça kullanışlıdır.
SOFe

Yanıtlar:


1799

git rebase -i yapacağım.

İlk olarak, temiz bir çalışma dizini ile başlayın: git statusbekleyen hiçbir değişiklik, silme veya ekleme göstermemelidir.

Şimdi, hangi taahhütleri bölmek istediğinize karar vermelisiniz.

A) En son taahhüdü bölmek

En son taahhüdünüzü ayırmak için önce:

$ git reset HEAD~

Şimdi parçaları her zamanki gibi bireysel olarak işleyin, ihtiyacınız olduğu kadar taahhüt üretin.

B) Bir taahhüdü daha geriye bölmek

Bu , yeniden temel almayı , yani geçmişi yeniden yazmayı gerektirir . Doğru taahhüdü bulmak için birkaç seçeneğiniz vardır:

  • Eğer üç geri dönüş olsaydı, o zaman

    $ git rebase -i HEAD~3
    

    nerede 3olduğunu geri kaç onaylatabilirsiniz olduğunu.

  • Ağaçta saymak istediğinizden daha uzakta olsaydı, o zaman

    $ git rebase -i 123abcd~
    

    123abcdBölmek istediğiniz taahhüdün SHA1'i nerede .

  • Master ile birleştirmeyi planladığınız farklı bir dalda (örneğin, bir özellik dalında) iseniz:

    $ git rebase -i master
    

Rebase düzenleme ekranını aldığınızda, ayırmak istediğiniz taahhüdü bulun. Bu satırın başlangıcında ( kısaca) pickile değiştirin . Arabelleği kaydedin ve çıkın. Rebase şimdi düzenlemek istediğiniz işlemden hemen sonra duracak. Sonra:edite

$ git reset HEAD~

Parçaları her zamanki gibi ayrı ayrı işleyin, ihtiyacınız olduğu kadar taahhüt üretin,

$ git rebase --continue

2
Bu cevap için teşekkürler. Hazırlama alanında daha önce kaydedilmiş bazı dosyalara sahip olmak istedim, bu yüzden benim için talimatlar biraz farklıydı. Benden önce git rebase --continue, ben aslında zorunda kaldı git add (files to be added), git commitdaha sonra git stash(kalan dosyaları için). Sonra git rebase --continue, git checkout stash .kalan dosyaları
Eric Hu

18
manojlds cevabı aslında git-scm ile ilgili belgelere bu bağlantıya sahiptir , bu da bölme işlemlerini çok net bir şekilde açıklar.

56
Ayrıca, git add -pyalnızca bir kısmını eişlemek için diffs düzenleme seçeneğiyle , dosyaların yalnızca kısmi bölümlerini eklemekten de yararlanmak istersiniz . git stashbazı işleri ileri taşımak ancak mevcut işlemden kaldırmak istiyorsanız da yararlıdır.
Craig Ringer

2
Bölmek ve yeniden sıralamak istiyorsanız, yapmak istediğim ilk önce bölmek ve sonra başka bir git rebase -i HEAD^3komut kullanarak ayrı olarak yeniden sıralamaktır . Bu şekilde bölünme kötüleşirse çok fazla işi geri almak zorunda kalmazsınız.
David M. Lloyd

4
@kralyk HEAD'de yeni işlenen dosyalar daha sonra diskte bırakılacak git reset HEAD~. Kaybolmazlar.
Wayne Conrad

312

Kaynaktan git-Rebase kılavuzu (ayırma bölümü TAAHHÜT)

Etkileşimli modda, taahhütleri "düzenle" eylemiyle işaretleyebilirsiniz. Ancak bu mutlaka git rebase'in bu düzenlemenin sonucunun tam olarak bir taahhüt olmasını beklediği anlamına gelmez. Gerçekten, taahhüdü geri alabilir veya başka taahhütler ekleyebilirsiniz. Bu, bir taahhüdü ikiye bölmek için kullanılabilir:

  • İle interaktif rebase başlatın git rebase -i <commit>^, <commit>bölmek istediğiniz işlemek edilir. Aslında, herhangi bir taahhüt aralığı, söz konusu taahhüdü içerdiği sürece yapacaktır.

  • Bölmek istediğiniz taahhüdü "düzenle" eylemiyle işaretleyin.

  • Söz konusu taahhüdü düzenleme söz konusu olduğunda, yürütün git reset HEAD^. Etkisi, HEAD'in birer birer geri sarılması ve endeksin uymasıdır. Ancak, çalışan ağaç aynı kalır.

  • Şimdi değişiklikleri ilk işleme dahil etmek istediğiniz dizine ekleyin. Bunu yapmak için git add(muhtemelen etkileşimli olarak) veya git gui(veya her ikisini birden) kullanabilirsiniz.

  • Şu an geçerli olan dizini, şu anda uygun olan herhangi bir ileti ile tamamlayın.

  • Çalışma ağacınız temiz olana kadar son iki adımı tekrarlayın.

  • Rebase ile devam edin git rebase --continue.


12
Windows'da ~bunun yerine kullanıyorsunuz ^.
Kevin Kuszyk

13
Dikkat kelimesi: Bu yaklaşımla taahhüt mesajını kaybettim.
user420667

11
@ user420667 Evet, elbette. Her resetşeyden önce taahhüdü söylüyoruz - mesaj dahil. İhtiyati olan şey, bir taahhüdü böleceğinizi ancak mesajının bir kısmını / tamamını saklamak istediğinizi biliyorsanız, o mesajın bir kopyasını almaktır. Yani, ing git showönce taahhüt rebaseveya bunu unutursanız veya tercih ederseniz: daha sonra üzerinden geri almak reflog. Çöpleri 2 hafta içinde toplanana kadar hiçbiri "kaybolmaz".
underscore_d

4
~ve ^Windows'da bile farklı şeylerdir. Hala şapka istiyorum ^, bu yüzden kabuk için uygun olarak kaçmak gerekir. PowerShell'de öyle HEAD`^. Cmd.exe ile kaçmak için iki katına çıkarabilirsiniz HEAD^^. Çoğu (tümü?) Mermilerinde, gibi tırnaklarla kuşatabilirsiniz "HEAD^".
AndrewF

7
Siz de yapabilirsiniz git commit --reuse-message=abcd123. Bunun için kısa seçenek -C.
j0057

41

Kullanım git rebase --interactiveönceki işlemeye çalışma düzenlemek için git reset HEAD~daha sonra, ve git add -psonra biraz daha ekleyin, ardından işlemek yapmak, bazı ekleme ve başka sizin gibi kadar çok kez, işlemek yapmak. İşiniz bittiğinde, çalıştırın git rebase --continueve yığınınızda daha önce bölünmüş olan tüm işlemlere sahip olacaksınız.

Önemli : Etrafınızda oynayabileceğiniz ve istediğiniz tüm değişiklikleri yapabileceğinizi ve eski değişiklikleri kaybetme konusunda endişelenmenize gerek olmadığını unutmayın, çünkü git reflogprojenizde istediğiniz değişiklikleri içeren noktayı bulmak için her zaman koşabilirsiniz (diyelim a8c4ab) ve sonra git reset a8c4ab.

İşte nasıl çalıştığını gösteren bir dizi komut:

mkdir git-test; cd git-test; git init

şimdi bir dosya ekle A

vi A

bu satırı ekle:

one

git commit -am one

ardından bu satırı A'ya ekleyin:

two

git commit -am two

ardından bu satırı A'ya ekleyin:

three

git commit -am three

şimdi A dosyası şuna benzer:

one
two
three

ve git logşuna benziyor (ben kullanıyorumgit log --pretty=oneline --pretty="%h %cn %cr ---- %s"

bfb8e46 Rose Perrone 4 seconds ago ---- three
2b613bc Rose Perrone 14 seconds ago ---- two
9aac58f Rose Perrone 24 seconds ago ---- one

Diyelim ki ikinci taahhüdü bölmek istiyoruz two.

git rebase --interactive HEAD~2

Bu, şuna benzer bir mesaj getirir:

pick 2b613bc two
pick bfb8e46 three

Bu taahhüdü düzenlemek için ilkini pickbir eile değiştirin.

git reset HEAD~

git diff bize ikinci taahhüt için verdiğimiz taahhüdü kaldırdığımızı gösteriyor:

diff --git a/A b/A
index 5626abf..814f4a4 100644
--- a/A
+++ b/A
@@ -1 +1,2 @@
 one
+two

Bu değişikliği düzenleyelim ve dosyadaki bu satıra "ve üçüncü" ekleyelim A.

git add .

Bu genellikle etkileşimli bir yeniden pazarlama sırasında çalışacağımız noktadır git rebase --continue, çünkü genellikle daha önceki bir taahhüdü düzenlemek için taahhütlerimize geri dönmek istiyoruz. Fakat bu sefer yeni bir taahhüt oluşturmak istiyoruz. Böylece kaçacağız git commit -am 'two and a third'. Şimdi dosyayı düzenliyoruz Ave satırı ekliyoruz two and two thirds.

git add . git commit -am 'two and two thirds' git rebase --continue

Taahhüdümüzle bir çatışmamız var three, bu yüzden çözelim:

Değişeceğiz

one
<<<<<<< HEAD
two and a third
two and two thirds
=======
two
three
>>>>>>> bfb8e46... three

için

one
two and a third
two and two thirds
three

git add .; git rebase --continue

Şimdi git log -pşöyle görünüyor:

commit e59ca35bae8360439823d66d459238779e5b4892
Author: Rose Perrone <roseperrone@fake.com>
Date:   Sun Jul 7 13:57:00 2013 -0700

    three

diff --git a/A b/A
index 5aef867..dd8fb63 100644
--- a/A
+++ b/A
@@ -1,3 +1,4 @@
 one
 two and a third
 two and two thirds
+three

commit 4a283ba9bf83ef664541b467acdd0bb4d770ab8e
Author: Rose Perrone <roseperrone@fake.com>
Date:   Sun Jul 7 14:07:07 2013 -0700

    two and two thirds

diff --git a/A b/A
index 575010a..5aef867 100644
--- a/A
+++ b/A
@@ -1,2 +1,3 @@
 one
 two and a third
+two and two thirds

commit 704d323ca1bc7c45ed8b1714d924adcdc83dfa44
Author: Rose Perrone <roseperrone@fake.com>
Date:   Sun Jul 7 14:06:40 2013 -0700

    two and a third

diff --git a/A b/A
index 5626abf..575010a 100644
--- a/A
+++ b/A
@@ -1 +1,2 @@
 one
+two and a third

commit 9aac58f3893488ec643fecab3c85f5a2f481586f
Author: Rose Perrone <roseperrone@fake.com>
Date:   Sun Jul 7 13:56:40 2013 -0700

    one

diff --git a/A b/A
new file mode 100644
index 0000000..5626abf
--- /dev/null
+++ b/A
@@ -0,0 +1 @@
+one

38

Önceki cevaplar, git rebase -ibölmek istediğiniz taahhüdü düzenlemek ve bölümlere ayırmak için kullanımını kapsamıştır .

Dosyaları farklı işlemlere böldüğünüzde bu işe yarar, ancak tek tek dosyalardaki değişiklikleri parçalamak istiyorsanız, bilmeniz gereken daha fazla şey vardır.

Bölmek istediğiniz taahhüde sahip olmak, kullanmak rebase -ive işaretlemek için editiki seçeneğiniz vardır.

  1. Kullandıktan sonra git reset HEAD~, git add -pher bir taahhütte istediğinizi seçmek için yamaları ayrı ayrı kullanın .

  2. İstemediğiniz değişiklikleri kaldırmak için çalışma kopyasını düzenleyin; geçici devleti taahhüt edin; ve bir sonraki tur için tüm taahhüdü geri çekin.

Seçenek 2, büyük bir taahhüdü bölüyorsanız yararlıdır, çünkü ara sürümlerin birleştirme işleminin parçası olarak düzgün bir şekilde oluşturulduğunu ve çalıştığını kontrol etmenizi sağlar. Bu şu şekilde devam eder.

Taahhüdü kullandıktan rebase -ive yaptıktan sonra edit,

git reset --soft HEAD~

taahhüdü geri almak, ancak taahhüt edilen dosyaları dizinde bırakmak. İlk taahhüdünüzün nihai sonuca ne kadar yakın olduğuna bağlı olarak --soft'u atlayarak karışık bir sıfırlama da yapabilirsiniz. Tek fark, tüm değişikliklerin aşamalı olarak başlatılmasıyla ya da onlarla birlikte başlatılmamış olmasıdır.

Şimdi içeri girin ve kodu düzenleyin. Değişiklikleri kaldırabilir, eklenmiş dosyaları silebilir ve aradığınız serinin ilk taahhüdünü oluşturmak istediğinizi yapabilirsiniz. Ayrıca oluşturabilir, çalıştırabilir ve tutarlı bir kaynak kümeniz olduğunu doğrulayabilirsiniz.

Mutlu olduğunuzda, dosyaları gerektiği şekilde sahne alın / ayıklayın (bunun için kullanmayı seviyorum git gui) ve değişiklikleri kullanıcı arayüzü veya komut satırı üzerinden yapın

git commit

Yapılan ilk taahhüt budur. Şimdi çalışma kopyanızı bölme işleminden sonraki durumuna geri yüklemek istersiniz, böylece bir sonraki işleminiz için daha fazla değişiklik yapabilirsiniz. Düzenlediğiniz taahhüdün sha1'ini bulmak için kullanın git status. Durumun ilk birkaç satırında, yürütülmekte olan ve orijinal taahhüdünüzün sha1'ini bulabileceğiniz rebase komutunu göreceksiniz:

$ git status
interactive rebase in progress; onto be83b41
Last commands done (3 commands done):
   pick 4847406 US135756: add debugging to the file download code
   e 65dfb6a US135756: write data and download from remote
  (see more in file .git/rebase-merge/done)
...

Bu durumda, düzenlediğim taahhütte sha1 var 65dfb6a. Bunu bilerek, çalışma dizinim üzerinde bu taahhüdün içeriğini git checkouthem taahhüt hem de dosya konumu biçimini kullanarak kontrol edebilirim . Burada .tüm çalışma kopyasını değiştirmek için dosya konumu olarak kullanın :

git checkout 65dfb6a .

Sonundaki noktayı kaçırmayın!

Bu, dosyaları düzenlediğiniz taahhüdeden sonra olduğu gibi kontrol eder ve hazırlar, ancak yaptığınız önceki işlemle ilgili olarak, zaten yapmış olduğunuz değişiklikler taahhüdün bir parçası olmaz.

Şimdi devam edebilir ve bölünmeyi bitirmek için olduğu gibi taahhüt edebilir veya başka bir geçici taahhütte bulunmadan önce taahhüdün bazı kısımlarını silebilirsiniz.

Orijinal işlem iletisini bir veya daha fazla işlem için yeniden kullanmak isterseniz, iletiyi doğrudan rebase'in çalışma dosyalarından kullanabilirsiniz:

git commit --file .git/rebase-merge/message

Son olarak, tüm değişiklikleri yaptıktan sonra,

git rebase --continue

rebase operasyonunu sürdürecek ve tamamlayacaktır.


3
Teşekkür ederim!!! Bu kabul edilen cevap olmalı. Bugün bana çok zaman ve acı kazandıracaktı. Nihai taahhüdün sonucunun sizi düzenleme altındaki taahhütle aynı duruma getirdiği tek cevap budur.
Doug Coburn

1
Orijinal işlem mesajını kullanma şeklinizi seviyorum.
Salamandar

Seçenek 2'yi kullanarak, yaptığımda git checkout *Sha I'm Editing* .her zaman Updated 0 paths from *Some Sha That's Not In Git Log*değişiklik yapar ve söyler .
Noumenon

18

git rebase --interactivebir taahhüdü daha küçük taahhütlere bölmek için kullanılabilir. Rebase üzerinde Git dokümanlar sürecin bir özlü gidiş yolu var - Yarma taahhüt :

Etkileşimli modda, taahhütleri "düzenle" eylemiyle işaretleyebilirsiniz. Ancak, bu mutlaka git rebasebu düzenlemenin sonucunun tam olarak bir taahhüt olmasını beklediği anlamına gelmez . Gerçekten, taahhüdü geri alabilir veya başka taahhütler ekleyebilirsiniz. Bu, bir taahhüdü ikiye bölmek için kullanılabilir:

  • İle interaktif rebase başlatın git rebase -i <commit>^, <commit>bölmek istediğiniz işlemek edilir. Aslında, herhangi bir taahhüt aralığı, söz konusu taahhüdü içerdiği sürece yapacaktır.

  • Bölmek istediğiniz taahhüdü "düzenle" eylemiyle işaretleyin.

  • Söz konusu taahhüdü düzenleme söz konusu olduğunda, yürütün git reset HEAD^. Etkisi, HEAD'in birer birer geri sarılması ve endeksin uymasıdır. Ancak, çalışan ağaç aynı kalır.

  • Şimdi değişiklikleri ilk işleme dahil etmek istediğiniz dizine ekleyin. Bunu yapmak için git add(muhtemelen etkileşimli olarak) veya git gui'yi (veya her ikisini) kullanabilirsiniz.

  • Şu an geçerli olan dizini, şu anda uygun olan herhangi bir ileti ile tamamlayın.

  • Çalışma ağacınız temiz olana kadar son iki adımı tekrarlayın.

  • Rebase ile devam edin git rebase --continue.

Kesinlikle emin ara değişiklik (onlar vb testsuite geçmek derlemek) kullanmanız gereken tutarlı olduğunu değilseniz git stashher tamamlamak sonra, henüz adı kararlı değil değişiklikleri uzakta saklamak için testi ve düzeltmeler gerekli ise taahhüt değişiklik .


Windows altında, ^komut satırı için bir kaçış karakteri olduğunu unutmayın : iki katına çıkarılmalıdır. Örneğin, git reset HEAD^^bunun yerine sorun git reset HEAD^.
Frédéric

@ Frédéric: s Bu konuya hiç girmedim. En azından PowerShell'de durum böyle değil. Ardından, ^iki kez sıfırlama işlemi geçerli HEAD'in üstünde iki işlem yapar.
Farway

@ Uzakta, klasik bir komut satırında deneyin. PowerShell başka bir canavar, kaçış karakteri arka eğim.
Frédéric

Özetlemek gerekirse: "HEAD^"cmd.exe'de veya PowerShell'de, HEAD^^cmd.exe'de HEAD`^PowerShell'de. Kabukların ve özel kabuğunuzun nasıl çalıştığını (yani, bir komutun programa aktarılan ayrı parçalara nasıl dönüştüğünü) öğrenmek, böylece komutları çevrimiçi olarak kabuğunuz için doğru karakterlere uyarlayabilmeniz için yararlıdır. (Windows'a özgü değildir.)
AndrewF 28:18

11

Şimdi Windows'daki en son TortoiseGit'te çok kolay bir şekilde yapabilirsiniz.

Rebase iletişim kutusunu açın, yapılandırın ve aşağıdaki adımları uygulayın.

  • Bölmek istediğiniz komutu sağ tıklayın ve " Edit" (seçim, squash, sil ... arasında) seçeneğini seçin .
  • StartYeniden baslamaya başlamak için " " düğmesini tıklayın .
  • Ayrılma taahhüdüne geldiğinde, " Edit/Split" düğmesini kontrol edin ve " " düğmesini Amenddoğrudan tıklayın . Tamamlama iletişim kutusu açılır.
    Düzenleme / Bölme kesinliği
  • Ayrı bir işleme koymak istediğiniz dosyaların seçimini kaldırın.
  • Teslim mesajını düzenleyin ve ardından " commit" düğmesini tıklayın .
  • Taahhüt edilecek dosyalar olana kadar, taahhüt iletişim kutusu tekrar tekrar açılır. Taahhüt edilecek başka dosya olmadığında, yine de bir taahhüt daha eklemek isteyip istemediğiniz sorulur.

Çok faydalı, teşekkürler TortoiseGit!



8

Lütfen unutmayın git reset --soft HEAD^. Buna git reset(varsayılan olarak --mixed) benzer ancak dizin içeriğini korur. Böylece, dosya eklediyseniz / kaldırdıysanız, bunları zaten dizinde bulundurursunuz.

Dev taahhütlerde çok faydalı olduğu ortaya çıktı.


3

İşte bir de taahhüt bölmek nasıl IntelliJ IDEA , pycharm , PhpStorm vb

  1. Sürüm Kontrolü günlük penceresinde, bölmek istediğiniz taahhüdü seçin, sağ tıklayın ve Interactively Rebase from Here

  2. bölmek istediğinizi işaretleyin edit, tıklayınStart Rebasing

  3. HEAD'in bu taahhüde ayarlandığı anlamına gelen sarı bir etiket yerleştirildiğini görmelisiniz. Bu işleme sağ tıklayın,Undo Commit

  4. Şimdi bu taahhütler sahneleme alanına geri döndü, daha sonra bunları ayrı ayrı taahhüt edebilirsiniz. Tüm değişiklikler yapıldıktan sonra, eski taahhüt devre dışı kalır.


2

Etkileşimli bir rebase olmadan yapılacak en kolay şey, (muhtemelen) bölmek istediğiniz bölümden önce yeni bir şube yapmaktır, kiraz toplama -n-taahhüdünü sıfırla, sıfırla, sakla, dosya taşıma işlemini tamamla, saklamayı yeniden uygula ve değişiklikleri yapın ve ardından eski şubeyle birleşin veya takip eden taahhütleri kirazla alın. (Daha sonra eski şube adını mevcut başlığa geçirin.) (MBO'ların tavsiyelerine uymak ve etkileşimli bir rebase yapmak muhtemelen daha iyidir.)


SO standartlarına göre, bu günlerde bu bir cevap değil olarak nitelendirilmelidir; ama bu yine de başkaları için yararlı olabilir, bu yüzden sakıncası yoksa lütfen bunu orijinal
yazının

@YakovL Makul görünüyor. Minimal eylem ilkesine göre, cevabı silmeyeceğim, ancak başka biri yaparsa itiraz etmem.
William Pursell

bu tüm rebase -iönerilerden çok daha kolay olurdu . Bence bu biçimlendirme eksikliği nedeniyle fazla dikkat çekmedi. Belki 126k puan var ve muhtemelen nasıl SO biliyorum, gözden olabilir. ;)
erikbwork


1

Eğer buna sahipseniz:

A - B <- mybranch

B taahhüdünde bazı içerikleri taahhüt ettiğinizde:

/modules/a/file1
/modules/a/file2
/modules/b/file3
/modules/b/file4

Ama B'yi C - D'ye bölmek ve bu sonucu almak istiyorsunuz:

A - C - D <-mybranch

Örneğin bu gibi içeriği bölebilirsiniz (farklı taahhütlerdeki farklı dizinlerdeki içerik) ...

Bölünmeden önce dalı yeniden işleme sıfırlayın:

git checkout mybranch
git reset --hard A

İlk taahhüdü oluştur (C):

git checkout B /modules/a
git add -u
git commit -m "content of /modules/a"

İkinci işlem oluştur (D):

git checkout B /modules/b
git add -u
git commit -m "content of /modules/b"

B'nin üstündeki taahhütler varsa ne olur?
CoolMind

1

8 yıldan fazla oldu, ama belki birisi yine de yararlı bulacaktır. Hile olmadan yapabildim rebase -i. Fikir git'i sizden önceki haline getirmek git commit:

# first rewind back (mind the dot,
# though it can be any valid path,
# for instance if you want to apply only a subset of the commit)
git reset --hard <previous-commit> .

# apply the changes
git checkout <commit-you-want-to-split>

# we're almost there, but the changes are in the index at the moment,
# hence one more step (exactly as git gently suggests):
# (use "git reset HEAD <file>..." to unstage)
git reset

Bundan sonra bu parlak göreceksiniz Unstaged changes after reset:ve repo tüm bu dosyaları işlemek üzeresiniz. Artık genellikle yaptığınız gibi kolayca tekrar işleyebilirsiniz. Umarım yardımcı olur.


0

Temelde ne yapacağımı biliyorum, ancak her zaman doğru sözdizimini unuttuğum için gerekli komutlara hızlı bir başvuru:

git rebase -i <sha1_before_split>
# mark the targeted commit with 'edit'
git reset HEAD^
git add ...
git commit -m "First part"
git add ...
git commit -m "Second part"
git rebase --continue

Emmanuel Bernard'ın blog gönderisine verilen krediler .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.