Wie kann ich einen Git-Diff darüber erstellen, was sich seit dem letzten Pull geändert hat?

StackOverflow https://stackoverflow.com/questions/61002

  •  09-06-2019
  •  | 
  •  

Frage

Ich möchte, vorzugsweise in Rake, die folgenden Aktionen in einem einzigen Befehl skripten:

  1. Holen Sie sich die Version meines lokalen Git-Repositorys.
  2. Git ruft den neuesten Code ab.
  3. Git unterscheidet sich von der Version, die ich in Schritt 1 extrahiert habe, mit der Version, die sich jetzt in meinem lokalen Repository befindet.

Mit anderen Worten: Ich möchte den neuesten Code aus dem zentralen Repository abrufen und sofort einen Vergleich dessen erstellen, was sich seit dem letzten Aufruf geändert hat.

War es hilfreich?

Lösung

Sie können dies ziemlich einfach mit refspecs tun.

git pull origin
git diff @{1}..

Dadurch erhalten Sie einen Überblick über den aktuellen Zweig, wie er vor und nach dem Pull existierte.Beachten Sie, dass der Diff falsche Ergebnisse liefert, wenn der Pull den aktuellen Zweig nicht tatsächlich aktualisiert.Eine andere Möglichkeit besteht darin, die aktuelle Version explizit aufzuzeichnen:

current=`git rev-parse HEAD`
git pull origin
git diff $current..

Ich persönlich verwende einen Alias, der mir einfach ein Protokoll in umgekehrter Reihenfolge anzeigt (d. h.vom ältesten zum neuesten), ohne Zusammenführungen, aller Commits seit meinem letzten Pull.Ich führe dies jedes Mal aus, wenn mein Pull den Zweig aktualisiert:

git config --global alias.lcrev 'log --reverse --no-merges --stat @{1}..

Andere Tipps

Art und Weise Greg sollte funktionieren (nicht ich, andere Greg: P). In Bezug auf Ihrem Kommentar, Herkunft ist eine Konfigurationsvariable, die von Git gesetzt, wenn Sie den zentralen Repository auf dem lokalen Rechner zu klonen. Im Wesentlichen erinnert eine Git-Repository, wo es herkam. Sie können jedoch setzen diese Variablen manuell, wenn Sie mit git-config müssen.

git config remote.origin.url <url>

wo url ist der Remote-Pfad zu Ihrem zentralen Repository.

Hier ist ein Beispiel Batch-Datei, die funktionieren soll (ich habe es nicht getestet).

@ECHO off

:: Retrieve the changes, but don't merge them.
git fetch

:: Look at the new changes
git diff ...origin

:: Ask if you want to merge the new changes into HEAD
set /p PULL=Do you wish to pull the changes? (Y/N)
IF /I %PULL%==Y git pull

Dies ist sehr ähnlich zu einer Frage, die ich über , wie Änderungen auf einem Zweig in git zu bekommen. Beachten Sie, dass das Verhalten von git diff vs. git log inkonsistent ist anders bei der Verwendung von zwei Punkten gegenüber den drei Punkten. Aber für Ihre Anwendung können Sie:

git fetch
git diff ...origin

Danach wird ein git pull die Änderungen in den Kopf zusammenführen.

Wenn Sie diese in Ihre bash Drop-Profile Sie in der Lage sein werden Grinsen (git remote incoming) und Mörtel (git remote abgehend) läuft diffs von Commits zu sehen, die für den Ursprung Master ein- und ausgehenden sind.

function parse_git_branch {
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}
function gd2 { 
 echo branch \($1\) has these commits and \($2\) does not 
 git log $2..$1 --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
}
function grin {
 git fetch origin master
 gd2 FETCH_HEAD $(parse_git_branch)
}
function grout {
 git fetch origin master
 gd2 $(parse_git_branch) FETCH_HEAD
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top