2013-04-11 11 views
5

Ja zawsze zadawałem sobie zestaw pytań o oddziałach Utworzyłem że mam jeszcze do ustalenia, w jaki sposób osiągnąć:git - zmiany w oddziale, jaki został utworzony?

  1. Jakie pliki ja zmienić w branży?
  2. Jakie są faktycznie zmiany (diff) wprowadzone do oddziału?
  3. Co to jest dziennik zatwierdzeń, które wprowadziłem do oddziału?

Teraz myślę, jeśli wymyśliłem, jak uzyskać skróty wszystkich zatwierdzeń, które zostały zatwierdzone do oddziału, ale nie zostały scalone w master przy użyciu git cherry master <branchname>. Dzięki temu mógłbym zahaczyć hash za pomocą hasha i dowiedzieć się wszystkiego, ale jeśli masz dużo zobowiązań, może to być czasochłonne. Zauważ, że nie chcę porównywać z bieżącym stanem wzorcowym. Myślę, że kluczem jest znajomość hasza głównego, z którego stworzyłeś swoją gałąź, ale nie jestem do końca pewien, jak to ustalić.

+2

http://stackoverflow.com/questions/4649356/how-do -i-run-git-log-to-see-changes-only-for-a-specific-branch –

+0

@GabrielePetronella thanks th Przynajmniej odpowiedzi # 3 myślę. – coding4fun

Odpowiedz

14

Aby dowiedzieć się, gdzie aktualna kasa odbiegał od oddziału master

base=`git merge-base master HEAD` 
echo $base 

aby dowiedzieć się, jakie pliki zostały zmienione od czasu,

git diff --name-only $base HEAD 

pokazać skumulowaną różnicę

git diff $base HEAD 

Jeśli chcesz opisać całą serię zatwierdzeń, możesz użyć składni w odpowiedzi Gabriele Petronella, która znajduje się powyżej, master..HEAD jest skrótem dla HEAD ^master, co oznacza "wszystkie zatwierdzenia osiągalne z HEAD, ale bez zatwierdzeń dostępnych od mistrza". Brakuje punktów końcowych domyślne w łeb, więc można powiedzieć git log --oneline master..

+0

Dziękuję bardzo. Stosunkowo nowy w git, więc nie byłem świadomy polecenia "merge-base". To doskonale odpowiada na moje pytanie. – coding4fun

+0

Dzięki! Jeśli używasz zewnętrznego narzędzia do porównywania, takiego jak [Beyond Compare] (http://stackoverflow.com/q/2069490/266535), zmień ostatnią linię na 'git difftool $ base HEAD --dir'. Przydaje się podczas przeglądania kodu innej gałęzi. – styfle

+0

dzięki! uratowałeś mój dzień – seol

2

Lista zmienionych plików i rzeczywista różnica sprawiają, że bardziej sensowne jest, jeśli znasz 2 zatwierdzenia między którymi chcesz porównać.

Jeśli chcesz zobaczyć diff między START_SHA1 i END_SHA1, można zrobić:

git diff START_SHA1 END_SHA1 

Jeśli chcesz tylko listę plików, można zrobić:

git diff --name-only START_SHA1 END_SHA1 

Jeśli również chcesz wiedzieć, jaki rodzaj zmiany weszły do ​​pliku (np. A, M, D, C, R, U), możesz zrobić:

git diff --name-status START_SHA1 END_SHA1 
1

zakładając rozgałęzione od master,

1. Jakie pliki zostały zmienione od rozgałęzienia?

git diff master...<branchname> --name-only 

2. Jaki jest pełny diff od rozgałęzienia?

git diff master...<branchname> 

3.Co to jest dziennik zatwierdzeń od momentu rozgałęzienia?

git log master..<branchname> 

Nie trzeba określić <branchname> jeśli masz to wyrejestrowany (np git diff master...).

Uwaga:git diff wymaga potrójne kropkę ... i git log wymaga podwójnej kropki .. aby uzyskać zachowanie które prosicie.


Dla wyjaśnienia dotyczące składni dot patrz:

+0

Wolę 'git diff master ... --stat' kiedy chcę zobaczyć listę zmienionych plików. – anishpatel

Powiązane problemy