2011-09-04 18 views
88

Tamam. Bir daldayım (working deyin) ve ben başka bir daldan (master deyin) değişiklik yapmak istiyorum, o zaman dalında git-merge master komutunu çalıştırıyorum ve değişiklikler geçmişini yeniden oluşturmadan birleştirilir hiç git-rebase master çalıştırırsam, master'daki değişiklikler, benim working şubemin üstüne yerleştirilmek üzere yeniden oluşturulur. Ben master gelen değişiklikleri birleştiren fakat working benim değişiklikleri rebase istiyorsanız yukarıda yer ne? Bunu nasıl yaparım? Bu yapılabilir mi?Nasıl, birleştirilen değişikliklerin üstünde cari şubesinin değişiklikleri rebase mı?

ben master dalında üst üste benim değişiklikleri koymak benim master dalda git-rebase working çalıştırabilir, ama benim working dalda bunu yapabilmek istiyorum, ben nasıl hiçbir fikrim yok. Bunu yapabileceğimiz en yakın şey master numaralı telefondan yeni bir şube oluşturmak ve bununla ilgili working değişikliklerini tekrar yapmaktır, ancak daha sonra working şubesini değiştirmek yerine yeni bir şubem olurdu.

cevap

173

rebase'un geriye doğru yaptığını anladınız. git rebase master sormak istediğiniz şeyi yapar - geçerli daldaki değişiklikleri (master'dan uzaklaştığından beri) alır ve bunları master üstünde tekrar oynatır, ardından geçerli dalın başını o yeni tarihin başı olarak ayarlar. ,'u geçerli şubenin üstündeki master değişikliklerini yeniden oynatmaz.

+0

LOL ile devam eden bir çalışmanızı senkronize. Ahh. Beni düzelttiğin için teşekkürler. Ben o serin @Jonathan ben tüm asmak ... –

+2

başlamıştı düşündüm Sadece zaman. Bu biraz zor bir konu. Bu arada, 'git working'' working' şube üstünde olmak (working' kapalı kollara 'Bu noktadan sonra)' master' en değişiklikleri hareket edeceğini rebase - ama bu kadar yapmak çok mantıklı bir şey değil ' master' :) ayrıca tersine neden LOKAL ve UZAKTAN açıklıyor – hobbs

41

bakmak için başka bir yol olarak git rebase master düşünmektir:

İştemaster

üstünde şimdiki şube Rebase, 'master' memba dalıdır Ve bu neden, bir rebase sırasında, ours and theirs are reversed açıklar.

+0

. Teşekkürler. – AVIDeveloper

+0

@AVIDeveloper, YEREL ve UZAKTAN, http://stackoverflow.com/a/3052118/6309 – VonC

+4

@@ VonC: Ayrıca okuyabilirsiniz. Evet, kendime bir öğleden sonra mırıldanarak geçirdikten sonra hepsi batmış, "UZAKTAN benim şube YEREL benim değil .." dedi.Dürüst olmak gerekirse, REMOTE/LOCAL/ours/theirs/mine yerine şube isimlerini (veya kısaltması SHA) görmeyi tercih ederdim. Düşüncelerim 'git difftool'ün korkunç sol/sağı ile aynıdır. Konu kapalı, ama 'difftool' için git-meld'e yapışıp, 'working-dir', 'stash @ {0}' gibi isimlerin keyfini çıkarın. – AVIDeveloper

3

Sadece şu şekilde bu anları önce yaptık: git checkout -b work-in-progress

  • son getirme sürüyor mevcut çalışmanızı git fetch origin/master
  • herhangi bir yerel değişimi ile git reset --hard origin/master
  • tekrarını son atmak değiştirir

    1. yedekleme ana sayfasından yapılan değişiklikler git rebase origin/work-in-progress
    2. son ana git rebase origin/master
  • +0

    Güncel çalışma dalını en son kod ile güncellemek için çalıştım. – Dragunov

    +0

    Bu talimat beklenmeyen bir şeydir. Yeni bir devam eden çalışma bölümü daha sonra sıfırlanıyor mu? Nasıl böyle bir şey: 1. Bir stash içinde kararsız çalışması koydu: 'git stash' 2. son değişiklikleri getir:' budala önde bulunuyor daldan fetch' 3. Rebase; Bu durumda, master: 'git rebase orijin/master' 4. Yaptığınız şey üzerinde çalışmaya geri dönün:' git stash pop' EDIT, yorumlarda satır sonları ekleyemiyorum. lol – NathanQ

    +0

    Belki sizin için mantıksız, ama yukarıdaki asıl soruyu gerçekten okudunuz mu? –