Bir çekme talebinden kaydetme nasıl kaldırılır


116

Bir çekme talebinde bulundum, ancak daha sonra projeye yerel olarak bazı taahhütler verdim ve bu da çekme talebimi kirletti, onu kaldırmaya çalıştım ama şansım yaver gitmedi.

StackOverflow'da benzer sorular buldum ama içindekileri uygulayamıyorum. GitHub'daki ilk çekme isteğim bu yüzden tüm bunların nasıl çalıştığı bana biraz tuhaf geliyor.

Vurgulanan taahhüt, diğer tüm şeyleri saklamam ve kaldırmam gereken işlemdir. Tarihte dördüncü taahhüt oluyor çünkü bazı birleştirme işi yapıyorum.

görüntü açıklamasını buraya girin

git günlüğüm görüntü açıklamasını buraya girin

Lütfen birisi neler olduğunu ve bu sorunu nasıl düzeltebileceğini açıklayabilir mi?


2
Sen gerek rebase ve sadece "çekme" "github eklenen" (diğer her taahhüt için hatlar üzerinden yani yorumunu) işlemek
Robbie Averill

1
Hangi şubeyi hangi şubeye yeniden hesaplayın lütfen daha fazla açıklama ekleyin.
humazed

what branch= üzerinde çalıştığınız dal, onto what branch= talep ettiğiniz dal
Robbie Averill

@Robbie Averill'in cevabımda neyi ima ettiğini açıkladım. Şimdiye kadar kimsenin bunu açıklayan bir cevap yazmamış olması garip.
onur

Yanıtlar:


116

Bunu yapmak için birkaç tekniğin var.

Bu gönderi - geri dönüşle ilgili bölümü okuyun, ne yapmak istediğimizi ve nasıl yapacağımızı ayrıntılı olarak açıklayacağız.

İşte probleminizin en basit çözümü:

# Checkout the desired branch
git checkout <branch>

# Undo the desired commit
git revert <commit>

# Update the remote with the undo of the code
git push origin <branch>

Revert komutu , orijinal commit'i geri alarak yeni bir commit yaratacaktır .


2
Projeyi başka bir kişiden çatalladığımızda ve çekme talebinde bazı yorumları kaldırmak istediğimizde bile işe yarıyor mu?
Dr.jacky

127

İnsanlar yanlış bir taahhüdü görmekten ve yanlış taahhütteki değişiklikleri geri almak için geri dönüş taahhüdünü görmek istemez. Bu kirlilik tarihi işliyor.

İşte bir geri dönüş kesinleştirme ile değişiklikleri geri almak yerine yanlış kesinlemeyi kaldırmanın basit bir yolu.

  1. git checkout my-pull-request-branch

  2. git rebase -i HEAD~n// netkileşimli yeniden temelde dahil etmek istediğiniz son işlemlerin sayısı nerede .

  3. İptal etmek istediğiniz taahhütler için pickile değiştirin drop.
  4. Kaydet ve çık.
  5. git push --force

8
bu benim için bir cazibe gibi çalıştı. Halkla ilişkilerde olmaması gereken bir sürü komisyonum vardı. Sadece etkileşimli olarak yeniden
ekledim, taahhütleri bıraktım

6
İtmek için yapmam gereken: git push origin HEAD:myBranch --force. Ama başka türlü harika ve yararlı.
ScottyBlades

4
Bu, GitHub'da açık bir PR'yi düzeltmek istediğinizde de kullanışlıdır, sadece zorunlu bir itme yapabilmeniz gerekir
Vladimir Hidalgo

2
" İptal etmek istediğiniz taahhütler için değiştirin" pickile neyi kastediyorsunuz drop?
jorijnsmit

2
@jorijnsmit git rebase -i HEAD~<n>, çalıştırdıktan sonra , dosyanın en üstünde <n>her satırda metni içeren işlemlerin satırları olacağını kastediyorlar pick <commit id>. Kaydedilmesini varsayılan pickher sen bırak metni değiştirmek istiyorum taahhüt öylesine için, pickiçindrop
Slim

6

Bir commit'i kaldırıyorsanız ve değişikliklerini saklamak istemiyorsanız @ferit'in iyi bir çözümü var.

Bu taahhüdü mevcut şubeye eklemek istiyorsanız, ancak mevcut pr'nin bir parçası olmak mantıklı değilse, bunun yerine aşağıdakileri yapabilirsiniz:

  1. kullanım git rebase -i HEAD~n
  2. Kaldırmak istediğiniz işlemeyi en alt (en yeni) konuma değiştirin
  3. Kaydet ve çık
  4. git reset HEAD^ --softdeğişiklikleri geri almak ve aşamalı bir duruma geri getirmek için kullanın .
  5. git push --forcekaldırılan kaydetmeniz olmadan uzak dalı güncellemek için kullanın .

Şimdi kaydetmeyi uzaktan kumandanızdan kaldırmış olacaksınız, ancak değişiklikleri yerel olarak yapmaya devam edeceksiniz.


2

Öyleyse aşağıdakileri yapın,

Şube adınızın şubem olduğunu ve bunda ekstra taahhütler olduğunu varsayalım.

  1. git checkout -b my_branch_with_extra_commits (Bu şubeyi farklı bir isim altında saklamak)
  2. gitk (Git konsolunu açar)
  3. Tutmak istediğiniz taahhüdü arayın. Bu işlemin SHA'sını bir not defterine kopyalayın.
  4. git checkout my_branch
  5. gitk (Bu git konsolunu açacaktır)
  6. Geri dönmek istediğiniz işleme sağ tıklayın (Değişikliklerinizden önce durumu belirtin) ve " reset branch to here" üzerine tıklayın
  7. Yap git pull --rebase origin branch_name_to _merge_to
  8. git cherry-pick <SHA you copied in step 3. >

Şimdi yerel şubenin kayıt geçmişine bakın ve her şeyin iyi göründüğünden emin olun.


0

Bana yardımcı olan buydu:

  1. Mevcut olanla yeni bir şube oluşturun. Mevcut olanı branch_oldve yeniyi olarak adlandıralım branch_new.

  2. branch_newHerhangi bir sorun kaydınız olmadığında kararlı bir duruma sıfırlayın . Örneğin, yerel yüksek lisans seviyenize koymak için aşağıdakileri yapın:

    git reset — hard master git push —force kaynak

  3. cherry-pickdan kaydedilmesini branch_oldINTObranch_new

  4. git push
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.