2012-01-23 12 views
6

GIT rebazlarının geçmişi yeniden yazacağını biliyorum, yani işlem kimlikleri değişecektir. Bununla birlikte, bir şube reddedildiğinde ve hangi şubeden ayrılmanın herhangi bir yolu var mı?Git kütük istavritleri

DÜZENLEME: Bir geliştirme şubesi 'A' ve bir konu dalı 'B' var. 'A' takım tarafından paylaşılıyor. Bir noktada, 'A' bir ana akım dalı ile yeniden kurulmuştur. Yeniden şubenin (ve müteakip taahhütlerin) bir sonucu olarak, konu dalını güncellediğimde tutarsızlıklar gördüm. Sorunları çözmek için konuşmak için doğru kişiyi bulmaya çalışıyorum.

cevap

8

Muhtemelen kimin yaptığını söyleyebilirsin! Yeniden yazdığınızda, yazanlar yeniden yazıldığı için, gönderici bilgileri orijinal yazar değil, rebase yapan kişiden olacaktır. (Bu, yazar bilgisinden ayrıdır.)

Bu bilgiyi gitk (soldaki farklı bölmede) veya git log --pretty=fuller (tam doluluktan daha fazla) çıktısında görebilirsiniz. Örnek kütük çıkışı:

commit b8624718b97a39a04637c91ec3517c109f3f681d 
Author:  Original Author <[email protected]> 
AuthorDate: Sun Aug 8 02:15:10 2010 -0300 
Commit:  New Committer <[email protected]> 
CommitDate: Mon Jan 23 17:29:39 2012 -0800 

    a lovely commit message 

... 

Gönderenin adı, e-postası ve tarihi, gerçekte bu işlemi yazan işlemden alınmıştır. Birden çok kez yeniden yazılmışsa, yalnızca en yeni bilgilere sahip olacağınızı unutmayın.

numaralı telefondan yeniden yapıştırıldığı yere gelince ... rebased taahhütlerinin orijinal sürümü de geçmişinizde bulunuyorsa, bu kolay.eşleşen bir taahhüt için sadece ya değiştirildiği bir şey tarafından taahhüt mesajın bir parçası, örneğin tam arama geçmişiyle taahhüt:

git log --all --grep='commit subject from a rebased commit' 
git log --all -S'void this_function_was_added() {' 

özgün artık tarihin her yerde taahhüt yoksa Bu zor olacak. Umarım, bunu yapan kişiyi aşağıdan takip ederek ve bilmedikleri takdirde, bu şubenin geçmişini görmek için, depolarında git reflog show <branch>'u çalıştırmasını isteyerek öğrenebilirsiniz.

2

Reflog, dalların ucu güncellendiğinde kaydedilecek bir mekanizmadır. Bu komut, içinde kayıtlı bilgileri yönetmektir.

"Temel olarak verilerin depolandığı yerde Git içini gerçekleştirmek her eylem, sen reflog içinde bulabilirsiniz. Nedense bunu sahiptir düşünüyorsanız Git gerçekten zor çalışır verilerinizi kaybetmemek için, bu yüzden, Şanslar, git reflog'u kullanarak kazabilirsiniz: Bunun anlamı, bir güvenlik ağı olarak kullanabilmenizdir: bunu bulabileceğinizden, birleştirme, yeniden düzenleme veya başka bir işlemin işinizi yok edeceğinden endişelenmemelisiniz. yine bu komutu kullanarak. "

+3

Sadece bir yorum, bu tarihin sadece eylemin yapıldığı repoda var olduğunu. Bir başkasının tarihini repoda bulamazsın. –

5
git reflog 

tüm git iş akışı tarihine bakmak sağlayacaktır. Üzerinde çalıştığım bir proje üzerinde burada ilk üç reflog girdileri:

151a1da [email protected]{0}: filter-branch: rewrite 
db8c822 [email protected]{1}: checkout: moving from fixes to master 
db8c822 [email protected]{2}: checkout: moving from master to fixes 

İlk sütun Shaid gösterir. Böylece, bu SHAID 'daki standart git komutlarını kullanabilirsiniz. git show 151a1da