2012-05-27 20 views
7

Bir github projesinde gitmeye çalışıyorum. (Yıllardır CVS, SVN ve hg kullanıyorum; git kafamı almak zor). Talimatları olabildiğince hassas bir şekilde takip ediyorum ve işe yaramayacağım. Çakışan güncelleştirme akış yukarı birleştirme

benim çatal proje klon:

git clone [email protected]:davidgiven/linux-allwinner.git 

tavsiye gibi benim itibaren çatallı olan projeyi izleyen bir 'memba' uzaktan ekleyin: Ben ondan getirme

git remote add upstream https://github.com/amery/linux-allwinner.git 

:

Tüm bunlar iyi çalışıyor. Ancak, bir hafta ya da öylesine oldu çünkü projeyi fırlattım ve yukarı yönde değişiklik yaptım. Bu yüzden bu değişiklikleri yapmak istiyorum. Birazdan dal --- allwinner-v3.0-android-v2 şu anda olduğum --- yüzden benim şube içine memba gelen birleştirme:

git merge upstream/allwinner-v3.0-android-v2 

... ve birleştirme çakışmaları olsun.

CONFLICT (add/add): Merge conflict in arch/arm/mach-sun5i/pm/standby/common.h 
CONFLICT (add/add): Merge conflict in arch/arm/mach-sun5i/pm/standby/Makefile 
CONFLICT (add/add): Merge conflict in arch/arm/mach-sun5i/pm/standby.S 
CONFLICT (add/add): Merge conflict in arch/arm/mach-sun5i/pm/Makefile 
[etc] 

Şimdi, şey kontrol ettik; Henüz çalışmaya başlamadım ve elimden geldiğim için projem tamamen el değmemiş. Bu nedenle herhangi bir çatışmanın olması mümkün olmamalıdır. Ama bazıları var; neler oluyor ve nasıl düzeltebilirim?

Güncelleme:

git show-branch HEAD upstream/allwinner-v3.0-android-v2 Ben bir kelime anlamıyorum söylemek zorunda olan bu gösterilmektedir: Olabilir

! [HEAD] arm: sun3i: add getioaddr macro 
! [upstream/allwinner-v3.0-android-v2] arm: sun3i: updated irq handling and machine_desc to 3.0 
-- 
+ [upstream/allwinner-v3.0-android-v2] arm: sun3i: updated irq handling and machine_desc to 3.0 
+ [upstream/allwinner-v3.0-android-v2^] arm: sunxi: renable early_printk in all _defconfig except crane's 
+ [HEAD] arm: sun3i: add getioaddr macro 
+ [HEAD^] arm: sun3i: add dummy machine type 
+0

Birleştirme yerine yeniden oluşturmak istediğiniz bir durum gibi görünüyor. – ThiefMaster

+0

'git show-branch HEAD upstream/allwinner-v3.0-android-v2 'ilginç bir şey ortaya çıkarabilir. – georgebrock

+0

Bu "show-branch" dan tam çıktı mı? Sonunda '++' – georgebrock

cevap

11

, o memba yeniden yazmış tarih (rebase, değiştirme ,…) - bunu yapmamalılar, ama asla bilmeyeceksin. Bu, herhangi bir yerel değişiklikleri iptal edip yapacaktır

git reset --hard upstream/allwinner-v3.0-android-v2 

(: Eğer herhangi bir yerel değişiklikleri veya taahhüt yok demek yana

, kendi şube sıfırlayarak geri temiz bir duruma depo getirmelidir geçerli HEAD kaydedilmesini ulaşılamaz!)


yukarıdaki (kuvvet), uzak depoya şube yeni sıfırlanan durumunu itecektir zaman y aksi takdirde tekrar çakışmaları karşılaşacak varsayar origin'dan çekmeyi deneyin.

git push origin +allwinner-v3.0-android-v2 

Zaten yerel kendini adamış olsaydın, rebase olurdu (veya kiraz toplama) memba şube üstünde senin kaydedilmesini ve ardından kökenli bir itme yapmak. Bu şekilde aynı yolu memba yaptığı yerel tarih yeniden yazmak ve yani üstte değişiklikleri, geçerli olacaktır:

git rebase --onto upstream/branch \ 
    last-original-upstream-commit-before-yours \ 
    your-branch 
+0

Bunu denedim. Ne yazık ki yardımcı olmuyor ... şimdi git git 'başarısız, ilk önce git git' ihtiyacım olduğunu söyledi; ama 'git çekme 'daha önce gittiğim aynı birleştirme hatası üretir. Bu aslında beklediğim şey; benim anladığım kadarıyla, "git reset" şu anki dalı değiştirdiğimiz şekilde değiştirdi, bu yüzden şimdi sadece 'upwin/allwinner-v3.0-android-v2' nin yerel olarak" allwinner-v3.0-android "olarak kontrol edilen bir kopyasına sahip oldum -v2'. Ancak, menşe/... ve yukarı-aşağı/... arasında çatışmalar meydana geldiğinden, değişen tek şey, çatışmaların gerçekleştiği zamandır. –

+0

@DavidGiven: git nereye itin? Eğer itme artık hızlı ileri gitmediğinden başarısız olur. Sorunuzda hiçbir şey yapmadığınızı belirtiyorsunuz, bu yüzden belki de tek bir zorlama itiş yoludur? – knittl

+0

'git itme kaynağı allwinner-v3.0-android-v2'. (Bu, tesadüfen, çıplak bir "git push" ile aynı şeyi yapar.) TBH, burada neler olup bittiğini anlamak istiyorum; Henüz bir taahhütüm yok, ama yakında bu konuda çalışmaya başlamak istiyorum, bu yüzden bir nuke-her şey çözümü yerine tekrar gerçekleşmesi durumunda genel bir çözüme ihtiyacım var. –

2

show-branch çıkış upstream ve HEAD her (varsayarak onların ortak atadan bu yana iki hareketin eklemiş demektir tam çıkış budur).(Ayrıca bakınız: http://www.gitguys.com/topics/git-show-branch-to-see-branches-and-their-commits/) Eğer kendiniz bir şey yapmadıysanız, bu yukarı doğru akımın bir rebase (ya da tarihi değiştiren başka bir şey) attığı anlamına gelir. Hiçbir şey yapmadığın için, Knittl'in cevabı tam olarak istediğin şey.

Bunun için değer, bunun için git log --oneline --graph --decorate --remotes --branches'u da seviyorum. Tüm şubeleriniz ve uzaktan kumandalarınız ile bir ASCII grafiği elde edersiniz, böylece nerede olduğunu görselleştirebilirsiniz.