2010-11-18 7 views
14

Gewohnt an SVN, mache ich immer ein 'update', bevor ich Änderungen teile, also ziehe ich immer zuerst, bevor ich etwas schiebe.Verhindern, dass git leere Zusammenführungs-Commits schreibt

Es ist nervig, wenn ich ziehen (obwohl es keine Änderungen an der Fernbedienung gab) und ein Commit für eine Zusammenführung mit 0 changed files with 0 additions and 0 deletions sehen. Commits wie:
https://github.com/UCF/Harvard-Mobile-Web/commit/be9d6b2d1ab196554e080d8b8647a9d16c8a5ddf

Ich finde dies zu nutzlos Lärm, wenn Sie die Commit-Geschichte betrachten.

Vielleicht gibt es etwas, das ich vermisse, gibt es irgendeinen Sinn für dieses Commit? Wenn nicht, gibt es eine Möglichkeit, zu verhindern, dass Git leere Merge-Commits schreibt?

+0

Sie scheinen zwei Commits verschmolzen zu haben, die sich von den gleichen zwei Commits verschmilzt. Da keiner von beiden ein direkter Nachfahre des anderen Git * ist * hat * einen Commit zu machen, wenn man darum bittet, ihn zu verschmelzen. Was ich nicht verstehe ist, warum du das gleiche Merge zweimal machen und dann das Ergebnis zusammenführen willst. Was hast du versucht zu tun? –

+3

1) gezogen von stromaufwärts [zusammengeführt Änderungen] 2) Zeit vergangen, zog von stromaufwärts wieder [zusammengeführt mehr Änderungen] 3) bereit, zu meiner Gabel zu schieben, zog zuerst (stellen Sie sicher, es gibt keine Änderungen an der Gabel von Mitarbeitern) - keine Änderungen, noch leeres Merge-Commit geschrieben. 'git pull --rebase' war genau das was ich suchte. – Doug

Antwort

20

Die genaue Definition von git pull ist im Wesentlichen "abholen und mit dem neuen Remote-HEAD für meinen aktuellen Zweig zusammenführen." Wenn Sie stattdessen einen Rebase durchführen möchten, geben Sie einfach git pull --rebase ein. Dies ändert den Pull, um Ihre Commits auf den neuen Remote HEAD zu übertragen.

Persönlich mag ich git fetch (neue Objekte von der Fernbedienung herunterladen, aber keine lokalen Filialen aktualisieren) und überprüfen Sie die Situation, dann entscheide selbst, ob zu fusionieren oder Rebase.

+1

Danke. Auch nützlich, Ihr Kommentar führte mich hier: [Wann sollte ich git pull --rebase verwenden?] (Http://stackoverflow.com/questions/2472254/when-should-i-use-git-pull-rebase) – Doug

5

Es gibt mehrere Optionen, die alle auf dasselbe hinauslaufen: git verwenden Sie die Option --rebase (wie von @cdhowie erwähnt).

Sie wahrscheinlich, dass Sie einer von denen bevorzugen finden:

Option 1: Explizit git pull --rebase jedes Mal verwenden.

Option 2: für jedes Projekt, ändern Sie die .git/config Datei durch Hinzufügen

[branch "master"] 
remote = origin 
merge = refs/heads/master 
rebase = true 

Option 3: in persönlichen ~/.gitconfig

[branch] 
    autosetuprebase = always 

Persönlich mag ich die Option 3, da es Erlaubt mir, nichts auf anderen Entwicklern zu erzwingen, während ich immer noch nicht --rebase eingeben muss.

Siehe auch How to make Git pull use rebase by default for all my repositories?

Verwandte Themen