2015-04-22 9 views
15

git diff ve git revizyonlarını (HEAD, ORIG_HEAD, FETCH_HEAD, vb.) Kullanmaya ilişkin çeşitli SO yanıtlarına baktım ve yerel şubenin başlangıcından bu yana değişikliklerin listelenmesinin kolay bir yolunu bulamadım. ya da son rebase'den beri.Noktadan veya dal kaynağından "git diff" için hızlı bir yol var mı?

tarafından kolay Ben SHA bakmak veya yapıştırmak bakmak zorunda kalmadan veya ne kadar geri bakmak istiyorum saymak zorunda kalmadan demek.

git diff origin/master yakın, ama ondan yeni şube teslim beri saptıklarına olabilir uzaktan anlamına gelir.

Ben git diff BASE_HEAD gibi bir şey kullanılabilir olması beklenir.

... zaten yapmanın bir yolu olmadığı sürece. Cevabı olan var mı? üç noktayla

+1

Yukarı akışınızın birleştirme tabanına göre fark yaratmak istiyorsanız, @ {u} ve üçlü nokta sözdizimini kullanın. Git git @ @ {u} ... HEAD ' –

+0

http://stackoverflow.com/questions/1527234/finding-a-branch-point-with-git, cevabı verir. Başka cevaplarla da ilgilenebilirsin. –

cevap

13

kullanın git diff @{u}...HEAD.

iki nokta ile

veya HEAD ihmal ile, her iki tarafta da değişikliklerden diffs gösterecektir. üç nokta ile

, sadece senin yanında değişikliklerden diffs gösterecektir.

Düzelt: Biraz farklı ihtiyaçları olan insanlar için, git merge-base numaralı telefonu kullanabilirsiniz (diğer cevap kullanım oranlarından daha fazla seçeneğe sahip olduğunu unutmayın).

+1

@ {u} yukarı akış yönünde. Ancak her zaman tanımlanmış bir üst tanıma sahip değilim ... – user776686

+0

@nuton well, herhangi bir iki taahhüt ile çalışır ... – o11c

+0

@ o11c çözümünüzle şube adını belirtmek için? – jangorecki

14

git merge-base'u kullanarak şube noktasını bulabilirsiniz. . master ana hat ve dev Geçmişini ilgilenen şube düşünün devmaster den kollara edildiği noktayı bulmak için çalıştırın:

git diff $(git merge-base --fork-point master dev)..dev 
: Şimdi bu temelde karşı dev diff yapabilirsiniz

git merge-base --fork-point master dev 

git diff $(git merge-base --fork-point master) 
:

dev Eğer buna kolaylaştırır akım şube olduğunu

Daha fazla bilgi için git-merge-base documentation'a bakın.

4

kullanarak dal başlangıç ​​noktasından geçerli dalı diff edebilirsiniz:

(başlangıç ​​noktası) bir dal adıdır
git diff (start point)... 

, bir taahhüt-kimliği veya bir etiket. Eğer develop den kollara bir özellik dal üzerinde çalışıyorsanız

Örneğin, şunları kullanabilirsiniz:

git diff develop... 

dal noktası beri geçerli dalı üzerindeki tüm değişiklikler için.

Bu bir yorumda zaten belirtilmişti, ancak bunun yanıt durumunu hak ettiğini düşünüyorum. Son rebase'den beri ne yapacağını bilmiyorum.

0

Üç çekimli gösterimi istiyorsanız, diffs için. şube dev denir ve master den kollara ise:

% git log master..dev 

revizyon sözdizimi r1..r2 (noktalar iki ile) "Herşey ulaşılabilir anlamı: günlüğüne için

% git diff master...dev 

, iki-nokta işaretini istiyorum r2 (dahil), ancak r1 (dahil) 'den erişilemez. Bunu kullanmanın normal yolu, bir dizi işlemin (r1 özel, r2 dahil) belirtilmesiyle r1 ve r210 ve r210'u düşünmektir, böylece 10 düzeltmeniz varsa 3..7 size 4, 5, 6 ve 7 değişikliklerini gösterir {1, 2, 3, 4, 5, 6, 7} eksi {1, 2, 3}. Ancak r1, r2'un bir atası olmak zorunda değildir. r1'un geriye dönük olarak tüm atalarını temsil ettiği ve r2 geri koşuluyla r2 geriye kalan tüm kümeyi temsil ettiği ve ikinci kümeden ilk seti çıkardığınız bir dizi işlem gibi düşünün. Öyleyse

:

git log master..dev 

şube eksi ustanın bütün tarihinin bütün tarihidir. Diğer bir deyişle, sadece şube.