Zaten hedef dalda olan işlemleri gösteren GitHub çekme isteği


137

GitHub'da ana olmayan bir şubeye yönelik bir çekme talebini incelemeye çalışıyorum. Hedef dal ana dalın gerisindeydi ve çekme isteği ana bilgisayardan taahhütleri gösterdi, bu yüzden ana birimi birleştirdim ve GitHub'a ittim, ancak bunların işlemeleri ve farkları, yenilendikten sonra çekme isteğinde hala görünüyor. GitHub'daki şubenin master'dan taahhütlere sahip olup olmadığını iki kez kontrol ettim. Neden hala çekme talebinde görünüyorlar?

Çekme talebini yerel olarak da kontrol ettim ve yalnızca birleştirilmemiş taahhütleri gösteriyor.


Bu, PR'yi birleştirme davranışını etkiler mi?
Nathan Hinchey

Hayır, sadece Github'daki fark.
lobati

Kendi kendine barındırılan Gitlab'ın aynı davranıştan muzdarip olup olmadığını bilen var mı?
Jeff Welling

2
Bu davranışın değişmesine olan ilgimizi ifade etmek için hepimizin GitHub ile iletişime geçmesini öneririm ( support.github.com/contact ). Bizden haber almazlarsa, bunun ne kadar önemli olduğunu bilemeyecekler ve sonsuza kadar bu şekilde kalacak.
steinybot

Yanıtlar:


107

Görünüşe göre Çekme İsteği hedef şubedeki değişiklikleri takip etmiyor (GitHub desteğiyle iletişime geçtim ve 18 Kasım 2014'te bunun tasarım gereği olduğunu belirten bir yanıt aldım).

Ancak, aşağıdakileri yaparak size güncellenmiş değişiklikleri göstermesini sağlayabilirsiniz:

http://githuburl/org/repo/compare/targetbranch...currentbranch

Değiştir githuburl, org, repo, targetbranch, ve currentbranchgerektiği gibi.

Ya da hexsprite'ın cevabında belirttiği gibi, PR'ye tıklayarak Editve tabanı geçici olarak farklı bir dala değiştirip tekrar geri döndürerek güncellemeye zorlayabilirsiniz . Bu şu uyarıyı verir:

Üssü değiştirmek istediğinizden emin misiniz?

Eski temel daldan bazı taahhütler zaman çizelgesinden kaldırılabilir ve eski inceleme yorumları güncelliğini yitirebilir.

Ve PR'da iki günlük girişi bırakacak :

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


4
Evet, bir süre önce destek ile iletişime geçtim ve aynı cevabı aldım. Bu durum için optimizasyon yapmazlar. Biraz sinir bozucu. Bunun üstesinden gelmenin yolu, sadece yeniden basmak ve yukarı itmek ya da çekişi kapatıp yeni bir tane oluşturmaktır.
lobati

4
Bu cevap sorunu çözmez, sadece kullanıcının gerçek farkı görmesine izin verir.
FearlessFuture

4
Soru, "Neden hala talepte görünüyorlar?" Oldu. Bu soruyu cevaplıyor.
Adam Millerchip

3
İyi bir çözüm için yorumuma göz atın. Başka bir dala geçmek ve daha sonra orijinal temel dala geri dönmek için PR düzenleme düğmesini kullanabilirsiniz; farkı yeniden hesaplayacaktır.
hexsprite

11
Bunun değiştirilmesi için sevgili bir github isteği var mı ?
vossad01

90

İşte iyi bir çözüm. EditTemel dalı başka bir şeye değiştirmek için GitHub'da PR'yi görüntülerken düğmeyi kullanın master. Daha sonra tekrar olarak değiştirin masterve artık yalnızca en son kaydetmelerdeki değişiklikleri doğru bir şekilde gösterecektir.


4
Daha fazla insanın bu çözümü kabul etmemesine şaşırdım. Orijinal tarihi geçmiş çekme isteğinin iyi olacağından şüpheleniyorum, ancak GitHub'ın tüm eski dosyaları göstermesini beğenmedim, bu yüzden bunu kullandım ve hem yorumu tutuyor hem de yalnızca birleştirilmek üzere olan gerçek değişiklikleri gösteriyor . Teşekkürler!
taranaki

2
Benim için çalışmadı.
Shashank'ın

Lanet olsun bu işe yarıyor!
Anurag Hazra

Üç yıl sonra ve bu hala harika bir çözüm. Ve birisinin birkaç saat önce yorum yaptığına bakın ^^ ^^
Ricardo Saporta,

33

Özetlemek gerekirse GitHub, çekme isteklerinde kaydetme geçmişini otomatik olarak yeniden oluşturmaz. En basit çözümler:

1.Çözüm: Yeniden Başlatın

Eğer birleştirmek istediğiniz varsayalım masterdan feature-01:

git fetch origin
git checkout feature-01
git rebase origin/master
git push --force

Bir çatal üzerinde çalışıyorsanız, originyukarıdakini ile değiştirmeniz gerekebilir upstream. Bkz. GitHub çatallı havuzunu nasıl güncellerim? orijinal deponun uzak şubelerini izleme hakkında daha fazla bilgi edinmek için.

2.Çözüm: Yeni bir çekme isteği oluşturun

Eğer intro birleştirmek istediğinizi varsayalım masterdan feature-01:

git checkout feature-01
git checkout -b feature-01-rebased
git push -u origin feature-01-rebased

Şimdi için bir çekme isteği açın feature-01-rebasedve için olanı kapatın feature-01.


4
Yeniden ödeme, kaydetme karmalarını değiştirir, bu nedenle mevcut inceleme yorumlarını çöpe atar mı?
haridsv

@haridsv Muhtemelen evet.
Mateusz Piotrowski

Zorlama yaparken dikkat etmeniz gereken bir şey var mı?
Paul Bendevis

1
@haridsv bu benim deneyimim değil. İncelemenin ortasında sık sık yeniden sıralarım ve yorumlar kaybolmaz. Halkla İlişkiler'deki değişikliklerin geçmişini kaybetmeme rağmen
Joel

@JoelBerkeley Bu arada, yazarın yeniden yorumladığı ve yorumların dokunaklı olduğunu gözlemlediği birkaç inceleme yaşadım. Ancak, aşamalı olarak inceleme yeteneğimizi kaybediyoruz ve büyük incelemeler için bu, incelemeciler için büyük bir ceza. Artık PR'larımız için birkaç kuralımız var ve bunlardan biri, gözden geçirme açıldıktan sonra asla yeniden ödeme yapmamaktır (henüz kimsenin incelemeye başlamadığından emin olmadıkça). Birleştirme iyidir, ancak bizim yönergemiz, birleştirme değişikliğini çatışma çözümlerinden başka herhangi bir değişiklikle karıştırmamaktır.
haridsv

17

Aşağıdakileri ~/.gitconfigdosyanıza eklemeniz gerekiyor :

[rebase]
    autosquash = true

Bu, bu cevabın gösterdiği ile aynı şeyi otomatik olarak gerçekleştirecektir .

Bunu buradan aldım .


2
Lanet olsun, yanlışlıkla oylamayı tıkladım. bu cevap bana yardımcı oldu. lütfen değiştirmeme izin ver.
Hector

@hosein Bunun için gidin. Şimdi yapabilmelisin.
Mateusz Piotrowski

1
Bence bu ya kabul edilen cevap olmalı ya da kabul edilen cevaba dahil edilmelidir. Bu, aradığım sonucu elde etti!
Ronald Rey

1
@RonaldRey git rebasing evrensel bir çözüm değildir, çünkü geçmişin düzenlenmesini içerir. Eğer herkes başkaları tarafından asla klonlanmayan özel çatallar üzerinde çalışıyorsa, sorun değil, ama birisi sizin deponuzu klonladığında ve siz daha sonra geçmişi düzenlediğinizde, farklı geçmişlere sahip olursunuz.
Adam Millerchip

14

Bununla karşılaşan ve GitHub Çekme İsteği davranışıyla kafası karışan herkes için temel neden, bir PR'nin kaynak dalın ortak atasına ve hedef dalın ortak atasına karşı kaynak dal ucunun bir farkı olmasıdır. Bu nedenle, ortak ataya kadar kaynak daldaki tüm değişiklikleri gösterecek ve hedef dalda meydana gelmiş olabilecek değişiklikleri hesaba katmayacaktır.

Daha fazla bilgiyi burada bulabilirsiniz: https://developer.atlassian.com/blog/2015/01/a-better-pull-request/

Ortak ataya dayalı farklılıklar tehlikeli görünüyor. Keşke GitHub'ın daha standart bir 3 yollu birleştirme tabanlı PR yapma seçeneği olsaydı.


1
Bahsettiğiniz neden doğru görünüyor, ancak kafam karıştı çünkü genel olarak yönetici her güncellendiğinde, değişiklikleri dalıma geri birleştiriyorum ... git checkout dalım -> git birleştirme ustası . Çekme isteği hemen yenilenir. Ortak ata da güncellenir mi?
G.One

2
Bu davranış, birleştirme yerine yeniden düzenleme yaparken ortaya çıkıyor
G.One

1
@ G. Bir, gerçekten geç cevap, ama evet - o ana daldan kaynak dalınıza birleşirseniz, tanım gereği ortak atayı güncellemiş olursunuz. Bu, birleştirdiğiniz usta taahhüdü.
David K. Hess

13

Bunu düzeltmenin bir yolu git rebase targetbrancho PR'da yapmaktır. Ardından git push --force targetbranch, Github doğru taahhütleri ve farklılıkları gösterecektir. Ne yaptığınızı bilmiyorsanız buna dikkat edin. Belki önce geri ödemeyi yapmak için bir test şubesini kontrol edin, sonra git diff targetbranchhala istediğiniz gibi olduğundan emin olun.


10

Bu, hedef daldan birleştirilen işlemleri sıkıştırdığınızda GitHub ile olur.

Hedef daldan birleştirmeler de dahil olmak üzere varsayılan birleştirme stratejisi olarak squash ve Github ile birleştirme kullanıyordum. Bu, yeni bir kaydetme sağlar ve GitHub, bu sıkıştırılmış kaydetmenin zaten ana olanlarla aynı olduğunu (ancak farklı karmalarla) fark etmez. Git bunu doğru bir şekilde ele alıyor, ancak tüm değişiklikleri GitHub'da tekrar görüyorsunuz, bu da incelemeyi can sıkıcı hale getiriyor. Çözüm, bir squash ve birleştirme yerine, yukarı doğru yapılan işlemlerde çekilen bunların düzenli bir şekilde birleştirilmesidir. Başka bir dalda bir bağımlılık olarak sizinkiyle birleşmek istediğinizde git merge --squashve diğer dalın gerçekten ustalaşmasını sağladıktan sonra ana işlemden çekmeden önce bu tek işlemi geri alın.

DÜZENLEME: başka bir çözüm, yeniden tabanlamak ve zorlamaktır. Temiz ama yeniden yazılmış tarih


1
Teşekkürler @achille, bu gerçekten benim tarafımdaki sorun oldu. Squash birleştirmeyi devre dışı bıraktıktan sonra çözüldü.
Ashvin777

0

Bunun arkasındaki teoriden tam olarak emin değilim. Ama bunu birkaç kez aldım ve aşağıdakileri yaparak bunu düzeltebildim.

git pull --rebase

Bu, değişiklikleri orijinal repo ana şubenizden alacak ve birleştirecektir (Eğer buna işaret ettiyseniz)

Sonra değişikliklerinizi github klonlanmış deponuza (hedef) zorla gönderirsiniz.

git push -f origin master

Bu, github klonunuzun ve ana deponuzun aynı github taahhüt seviyesinde olduğundan ve dallar arasında gereksiz değişiklikler görmediğinizden emin olmanızı sağlayacaktır.


0

Aşağıdaki komutları tek tek deneyin.

git pull "latest

git reset --hard master

-1

İşleri karıştırmaktan çok endişeleniyorsanız, güvenli olmayan bir yaklaşım: dosyaya gidin ve değişiklikleri manuel olarak kaldırın, ardından kullanarak son kaydetmenizle ezin.

git add .  && git commit -a --allow-empty-message -m '' && git reset --soft HEAD~2 &&
git commit --edit -m"$(git log --format=%B --reverse HEAD..HEAD@{1})"

Ben çatışma yok, gitmekte fayda var!

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.