2013-03-01 11 views
12

Kısa bir süre önce GitHub for Windows'u kullanmaya başladım.Çakışma üzerinde, Windows için GitHub beni "rebasing" durumuna sokar, oradan nasıl gidilir?

Sadece bir çakışma oldu. Komut satırında bu nasıl ele bilemez, ama Windows için GitHub ben aşina değilim bir duruma soktu düşünemiyorum:

C:\Users\w\Documents\GitHub\CmisSync [(6026d18...)|REBASE +0 ~1 -0 !1 | +0 ~0 -0 !1]> git status 
# Not currently on any branch. 
# You are currently rebasing. 
# (fix conflicts and then run "git rebase --continue") 
# (use "git rebase --skip" to skip this patch) 
# (use "git rebase --abort" to check out the original branch) 
# 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
... 
Ben, çatışmayı sabit dosyaları işlenen

ama git push I çalıştırdığınızda am anlattı:

fatal: You are not currently on a branch. 
To push the history leading to the current (detached HEAD) state now, use 

    git push origin HEAD:<name-of-remote-branch> 

benim birleştirilmesi uzak usta taahhüt almak için önerilen yolu nedir?
git push origin HEAD:master'dan şüphe edeceğim.

cevap

18

Simon Boudrias ile söylediklerimiz arasında, bir rebase sırasında ne yaptığınızı bilmiyorsanız, başlamak için en iyi şey git rebase --abort ile yapılır. Fiil dediği gibi, şimdiki rebase'i iptal eder ve sizi depoya ve çalışma kopyasına, rebase başlamadan önceki aynı durumda bırakır.

Bundan sonra, size (Ben ne olduğunu söylediğini sanmıyorum, ama bu ya, gerçekten önemli olduğunu sanmıyorum) Rebase sürecini başlattı yaptık ne yapmalı. Tabii ki, rebase yeniden başlayacak ve burada asıl sorunun yanıtlanmaya başladığı yer. Durum çıkışı söylediği gibi

, çakışmaları var gibi. Onları (Ben genellikle meld ile bunları çözmek için git status --short artı git mergetool kullanın), sonra git add dosyaları çözmelidir. Durum tamam olduğunda (örneğin, herhangi bir çakışma olmaksızın, taahhüt edilmesi gereken her dosya eklenir), , git commit yerine olmalıdır.

fikri git rebase işlemek verilen üstüne kaydedilmesini bir grup geçerli olmasıdır. Neyin üstünde nelerin uygulandığını gerçekten bilmiyorum, ama akılda tutulması çok önemli. Birden çok çakışmanın olabileceğini unutmayın, çünkü işlemler tek tek uygulanmaktadır. Uygulanan son işlemin ne olduğunu görmek için git log'u kullanın ve bence şu anda uygulanmakta olan işlemin taahhüt mesajıyla birlikte .git/ dizininizde bir dosya olması gerekir.

Anlaşmazlık çözümü sırasında dosyalarda değişiklik yapmayı (veya unutmadan) bir sonraki işlem tarafından uygulanacak olan değişiklikleri eklemeyi denemek için bir commone newbie hatası (hepimiz oradayız :)).

Bu yüzden, bazı anlaşmazlıkları çözdükten sonra dosyaları ekledikten ve git rebase --continue bunları ekledikten sonra, mutlu bir işlevsel depoya ulaşmanız ve buradan git push ürününü kullanabileceksiniz.

Son olarak, ama en az önemlisi: Bütün Rebase şeyler sonra, herhangi bir kamu taahhüt değiştirerek değiliz kontrol etmek git log kullanın.Yeni şubenizin uzaktaki HEAD taahhüdünü içerdiğini varsayalım. Rebasing güçlü ve çok tehlikelidir. Bir kamu taahhüdünü yeniden inşa etmek istemezsiniz - belki de yüz yüze gelmek istemeyen tek bir acısıdır :)

+0

"Bir kamu taahhüdünü değiştirmediğinizi kontrol edin" ile ne demek istiyorsunuz? –

1

Önce çakışmalarınızı çözdüğünüzde, git rebase --continue numaralı telefonu arayarak rebase modunu sonlandırmanız gerekir. Bu, daha sonra çekmiş olduğunuz şubeye geri dönmelidir. Komut satırı (posh-git eklentisi), REBASE

yerine master belirtilirse, bu durumda git push origin master kullanarak basabilirsiniz. Ek parametreler Git tarafından otomatik olarak doldurulabilir, ancak bu ayarlarınıza bağlıdır.

+1

Bu noktada, muhtemelen bir rebase sırasında işlemeye ve itmeye çalışırken karmakarışık bir hal aldı. 'Git rebase --abort'ı çalıştırmak ve rebase ile bırakılan eylemleri yeniden yapmak iyi bir fikir gibi görünüyor. – mgarciaisaia

+0

İyi bir nokta, her zaman bir karışıklık yaptığınızda iptal etmek ve baştan başlamak için iyi bir zaman. Bunu eklediğiniz için teşekkürler. –

+0

Simon, Bunu yapmayı denedim, ama hiçbir değişiklik yapmadim - 'git add' kullanmayı unuttun mu? ', Yani tam olarak ne yaptım @ desert69 yaptım ve işe yaradı. @ desert69, fikrinizi bir cevap olarak gönderebilir misiniz? Teşekkür ederim! –