Ich verwende ein Git-Zwischenrepository, um ein entferntes SVN-Repository zu spiegeln, von dem aus Leute klonen und daran arbeiten können. Das Intermediate-Repository hat seinen Master-Zweig, der jede Nacht vom vorgelagerten SVN neu basiert, und wir arbeiten an Feature-Zweigen. Beispielsweise:
remote:
master
local:
master
feature
Ich kann meinen Funktionszweig erfolgreich auf die Fernbedienung zurückschieben und erhalte das, 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 zurückzusetzen, aber ich möchte dies von meinem lokalen Computer aus tun. Ich würde gerne in der Lage sein:
git checkout master
git pull
git checkout feature
git rebase master
git Push Origin feature
Damit der Zweig der Remote-Funktionen mit dem Remote-Master auf dem neuesten Stand ist. 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 mache mir Sorgen, dass in der Nachricht feature -> feature
eher, als feature -> Origin/feature
aber dies kann nur eine Präsentationssache sein.
Vermisse ich etwas oder gehe ich das falsch an? Es ist nicht kritisch, die Wiederherstellung auf dem Remote-Server zu vermeiden, aber es erschwert das Beheben von Zusammenführungskonflikten aus der Wiederherstellung erheblich.
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:
git Push Origin feature -f
Wenn jedoch andere daran arbeiten, sollten Sie den Master zusammenführen und nicht neu starten.
git merge master
git Push Origin feature
Auf diese Weise wird sichergestellt, dass Sie eine gemeinsame Vergangenheit mit den Personen haben, mit denen Sie zusammenarbeiten.
Auf einer anderen Ebene sollten Sie keine Back-Merges durchführen. Sie verschmutzen damit den Verlauf Ihres Feature-Zweigs mit anderen Commits, die nicht zum Feature gehören, und erschweren so die spätere Arbeit mit diesem Zweig - ob neu basiert oder nicht.
Dies ist mein Artikel zum Thema Branch per Feature .
Hoffe das hilft.
Schön, dass Sie dieses Thema angesprochen haben.
Dies ist eine wichtige Sache/ein wichtiges Konzept in Git, von dessen Kenntnis viele Git-Benutzer profitieren würden. Git Rebase ist ein sehr leistungsfähiges Tool, mit dem Sie Commits zusammenpressen, Commits entfernen usw. Aber wie bei jedem leistungsfähigen Tool müssen Sie im Grunde wissen, was Sie tun, oder etwas könnte wirklich schief gehen.
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 umschreiben können, aber nicht die anderer. Wenn Sie nur mit Ihren lokalen Daten herumspielen, hat dies keine Auswirkungen auf andere Repositorys.
Aus diesem Grund ist es wichtig, sich daran zu erinnern, dass Sie Commits, die Sie einmal übertragen haben, später nicht erneut verwenden sollten. Der Grund, warum dies wichtig ist, besteht darin, dass andere Personen Ihre Commits einbinden und ihre Arbeit auf Ihre Beiträge zur Codebasis stützen können. Wenn Sie sich später dazu entschließen, diese Inhalte von einem Ort an einen anderen zu verschieben (umzustrukturieren) und diese zu pushen Änderungen, dann werden andere Leute Probleme bekommen und müssen ihren Code neu erstellen. Stellen Sie sich vor, Sie haben 1000 Entwickler :) Es verursacht nur eine Menge unnötiger Nacharbeit.
Da Sie feature
auf das neue master
umbasiert haben, ist Ihr lokales feature
kein schneller Vorlauf von Origin/feature
Mehr. Ich denke, es ist in diesem Fall vollkommen in Ordnung, die Schnellvorlaufprüfung mit git Push Origin +feature
Zu überschreiben. Sie können dies auch in Ihrer Konfiguration angeben
git config remote.Origin.Push +refs/heads/feature:refs/heads/feature
Wenn andere Personen zusätzlich zu Origin/feature
Arbeiten, werden sie durch dieses erzwungene Update gestört. Sie können dies vermeiden, indem Sie das neue master
in feature
zusammenführen, anstatt es neu zu definieren. Das Ergebnis wird in der Tat ein schneller Vorlauf sein.
Sie können die Prüfung deaktivieren (wenn Sie wirklich sicher sind, dass Sie wissen, was Sie tun), indem Sie --force
Option zu git Push
.