Ich verwende ein Git-Zwischenrepository, um ein entferntes SVN-Repository zu spiegeln, von dem aus Leute klonen und daran arbeiten können. Im Zwischen-Repository wird der Hauptzweig jede Nacht vom Upstream-SVN neu basiert, und wir arbeiten an Feature-Zweigen. Beispielsweise:
remote:
master
local:
master
feature
Ich kann meinen Feature-Zweig erfolgreich auf die Fernbedienung zurückschieben und am Ende das erreichen, was ich erwarte:
remote:
master
feature
local:
master
feature
Ich richte dann den Zweig neu ein, um die Fernbedienung zu verfolgen:
remote:
master
feature
local:
master
feature -> origin/feature
Und alles ist gut. Was ich von hier aus tun möchte, ist, den Feature-Zweig auf den Master-Zweig auf der Fernbedienung umzustellen, aber ich möchte dies von meinem lokalen Computer aus tun. Ich möchte in der Lage sein:
git checkout master
git pull
git checkout feature
git rebase master
git push origin feature
Um den Zweig der Remote-Funktion mit dem Remote-Master auf dem neuesten Stand zu halten. Diese Methode führt jedoch dazu, dass Git sich beschwert:
To <remote>
! [rejected] feature -> feature (non-fast-forward)
error: failed to push some refs to '<remote>'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' section of 'git push --help' for details.
git pull
macht den Trick, verursacht aber ein Merge-Commit, das ich vermeiden möchte. Ich bin besorgt, dass die Nachricht feature -> feature
eher besagt als, feature -> origin/feature
aber dies kann nur eine Präsentationssache sein.
Vermisse ich etwas oder gehe ich völlig falsch vor? Es ist nicht wichtig, die Neuausrichtung auf dem Remote-Server zu vermeiden, aber es macht die Behebung von Zusammenführungskonflikten aus der Neueinrichtung viel schwieriger.
Antworten:
Es kommt darauf an, ob die Funktion von einer Person verwendet wird oder ob andere daran arbeiten.
Sie können den Push nach dem Rebase erzwingen, wenn es nur Sie sind:
Wenn jedoch andere daran arbeiten, sollten Sie den Master zusammenführen und nicht neu starten.
Dadurch wird sichergestellt, dass Sie eine gemeinsame Geschichte mit den Personen haben, mit denen Sie zusammenarbeiten.
Auf einer anderen Ebene sollten Sie keine Back-Merges durchführen. Was Sie tun, ist, den Verlauf Ihres Feature-Zweigs mit anderen Commits zu verschmutzen, die nicht zum Feature gehören, was die spätere Arbeit mit diesem Zweig schwieriger macht - Neubasieren oder nicht.
Dies ist mein Artikel zum Thema " Branch per Feature" .
Hoffe das hilft.
quelle
if others are working on it, you should merge and not rebase off of master
, Rebase besser nur in privaten Filialen verwendet werden.git push origin feature -f
. In bestimmten Kontexten kann es erforderlich sein, auch bei Remote-Verzweigungen eine Rebase durchzuführen. Der springende Punkt ist zu wissen, was Sie tun. Und wir sollten übernehmen, dass Sie möglicherweise Commits in Remote Repo löschen.Schön, dass Sie dieses Thema angesprochen haben.
Dies ist eine wichtige Sache / ein wichtiges Konzept in Git, von dem viele Git-Benutzer profitieren würden. git rebase ist ein sehr leistungsfähiges Tool, mit dem Sie Commits zusammenfassen, Commits entfernen usw. Aber wie bei jedem leistungsstarken Tool müssen Sie im Grunde wissen, was Sie tun, da sonst möglicherweise etwas schief geht.
Wenn Sie lokal arbeiten und mit Ihren lokalen Niederlassungen herumspielen, können Sie tun, was Sie möchten, solange Sie die Änderungen nicht in das zentrale Repository übertragen haben. Dies bedeutet, dass Sie Ihre eigene Geschichte neu schreiben können, aber nicht die anderer. Wenn Sie nur mit Ihren lokalen Dingen herumspielen, hat nichts Auswirkungen auf andere Repositorys.
Aus diesem Grund ist es wichtig, sich daran zu erinnern, dass Sie Commits, sobald Sie sie gepusht haben, später nicht erneut starten sollten. Der Grund, warum dies wichtig ist, besteht darin, dass andere Personen möglicherweise Ihre Commits einbringen und ihre Arbeit auf Ihre Beiträge zur Codebasis stützen. Wenn Sie sich später dazu entschließen, diesen Inhalt von einem Ort an einen anderen zu verschieben (neu zu gründen) und diese zu pushen Änderungen, dann bekommen andere Leute Probleme und müssen ihren Code neu gründen. Stellen Sie sich jetzt vor, Sie haben 1000 Entwickler :) Es verursacht nur eine Menge unnötiger Nacharbeiten.
quelle
Da Sie
feature
auf dem neuen Basis neu aufgebaut habenmaster
, ist Ihr Lokalfeature
kein schneller Vorlauforigin/feature
mehr. Ich denke, in diesem Fall ist es vollkommen in Ordnung, die Schnellvorlaufprüfung zu überschreiben, indem Sie dies tungit push origin +feature
. Sie können dies auch in Ihrer Konfiguration angebenWenn andere Personen darüber arbeiten
origin/feature
, werden sie durch dieses erzwungene Update gestört. Sie können dies vermeiden, indem Sie das Neuemaster
infeature
einfügen, anstatt es neu zu gründen. Das Ergebnis wird in der Tat ein schneller Vorlauf sein.quelle
Sie können die Prüfung deaktivieren (wenn Sie wirklich sicher sind, dass Sie wissen, was Sie tun), indem Sie die
--force
Option auf verwendengit push
.quelle