Git Push zu einem neuen Zweig. Erstellen Sie einen neuen Zweig auf dem Server aus dem aktuellen lokalen Zweig. Was ist der Unterschied zwischen "Git Pull" und "Git Fetch"

Wenn die Passwortauthentifizierung verwendet wird:

  1. $ git clone https: // Benutzername: [E-Mail geschützt]/opt/git/repository.git

Arbeite mit Ästen

  Alle Branchen anzeigen:
  1. $ Git Branch
  Erstellen Sie eine neue Niederlassung:
  1. $ Git Branch
  Gehe zur neuen Filiale:
  1. $ git Kasse
  Erstelle einen neuen Zweig und gehe dorthin:
  1. $ git Checkout -b
  Lokale Filiale löschen:
  1. $ git branch -d
  Zweig aus Remote-Repository löschen:
  1. $ git push origin --delete

Arbeiten Sie mit Commits

Wie lösche ich das letzte Commit?

  1. $ git reset --soft HEAD ^
Git wie es geht. Kapitel 16. Commits stornieren
Git wie es geht. Kapitel 17. Commits aus einem Zweig entfernen
Git offizielle Dokumentation. Git-Grundlagen - Änderungen rückgängig machen

Wie ändere ich das letzte Commit?

  1. $ git füge new_file.txt hinzu
  2. $ git commit --amend

Wie ändere ich den Kommentar zum letzten Commit?

  1. $ git commit --amend
  2. $ git commit --amend -m "Neuer Kommentar"

Wie kombiniere ich mehrere Commits?

  1. $ git rebase -i HEAD ~ 3
   Anstelle von HEAD ~ 3 können Sie auch ein Hash-Commit verwenden. Es ist notwendig, den Hash des Commits zu übergeben, zu dem alles zusammengeführt (abgeflacht) werden muss.
Ein Editor wird mit einer Liste von Commits geöffnet, das älteste Commit befindet sich oben.
  1. pick 1111111 1 Kommentar festschreiben
  2. pick 2222222 2 Kommentare festschreiben
  3. pick 3333333 3 Kommentare festschreiben
   Sie müssen pick durch squash ersetzen, um dies zu erhalten:
  1. pick 1111111 1 Kommentar festschreiben
  2. squash 2222222 Festschreiben von 2 Kommentaren
  3. squash 3333333 3 Kommentare festschreiben
   Als nächstes müssen Sie die Datei speichern und beenden. Es wird wieder ein Texteditor mit allen Kommentaren zu Commits geöffnet. Sie müssen bearbeiten, speichern und beenden. Nach diesen Aktionen werden die Commits zusammengeführt.

Wie mache ich Änderungen in einer bestimmten Datei rückgängig und setze sie in den Zustand zurück, in dem sie sich nach dem letzten Commit befunden hatte?

  1. $ git checkout - file.txt

Wie mache ich alle nicht festgeschriebenen (nicht festgeschriebenen) Änderungen rückgängig?

  1. $ git Kasse

Wie kann ich einige Dateien für das nächste Commit speichern?

Angenommen, Sie möchten Änderungen an einigen Dateien festschreiben und beim nächsten Festschreiben Änderungen an anderen Dateien festschreiben. Anschließend können Sie sie vorübergehend aus dem Repository entfernen (Unstage-Dateien) und sie dann erneut hinzufügen.
  1. $ git setze HEAD file.txt zurück
   Dieser Befehl löscht die Datei aus dem Repository und bleibt in den alten Commits erhalten. Kopf gibt das letzte Festschreiben im aktuellen Zweig an.

Wenn Sie nicht zum Remote-Repository pushen können, weil die aktuelle Version des Repositorys kleiner als die des Remote-Repositorys ist

In diesem Fall können Sie einen Push ausführen.
  1. $ git push -f origin master

Zweige zusammenführen

Wie nehme ich nur einige Dateien aus einem anderen Zweig?

  1. $ git checkout branchname - Pfad / zu / file.file

Remote-Repositorys

Informationen zum Remote-Repository anzeigen

  1. $ git Remote Show Ursprung
  Es wird so etwas angezeigt:
  1. * entfernter Ursprung
  2. URL abrufen: [E-Mail geschützt]: /opt/git/test-project.git
  3. Push-URL: [E-Mail geschützt]: /opt/git/test-project.git
  4. HEAD Branch: Master
  5. Remote-Zweigstelle:
  6. master neu (nächster Abruf wird in Remotes / Origin gespeichert)
  7. Lokale Referenz für "Git Push" konfiguriert:
  8. master Pushs to Master (lokal veraltet)

Hinzufügen eines Remote-Repositorys

  1. $ git remote add origin [E-Mail geschützt]: /opt/git/test-project.git

Gelöschte Zweige  Sind Links zum Status von Filialen in Ihren Remote-Repositorys. Hierbei handelt es sich um lokale Zweige, die nicht verschoben werden können. Sie werden automatisch verschoben, wenn Sie über das Netzwerk kommunizieren. Remote-Zweige dienen als Lesezeichen, um Sie daran zu erinnern, wo sich die Zweige in den Remote-Repositorys befanden, als Sie zuletzt eine Verbindung zu ihnen hergestellt haben.

In diesem Fall ist es beispielsweise möglich, den Rechtsstreit in einem komplexen Zusammenschluss fortzusetzen und alle verfügbaren Versuche, den Zusammenschluss selbst zu erörtern, beizubehalten. Angenommen, Marco schlägt Gianni vor, dass Versuch 2 am richtigsten ist, aber eine kleine Änderung erforderlich ist.

Geschichte umschreiben Push

Hier ist die Situation. Zu diesem Zeitpunkt haben wir einen dritten Merge-Fix, der das Ergebnis von Gianni2s Versuch ist, zu dem Marco seine Korrekturen hinzufügte. An dieser Stelle können Sie eine Bereinigung durchführen.


In diesem Moment kann Gianni einen Push versuchen, der erfolgreich sein wird, wenn zur gleichen Zeit niemand anderes weitere Herkunftsänderungen vorantreibt.

Sie sehen aus wie (Deletion Name Repo.) / (Branch). Wenn Sie beispielsweise sehen möchten, wie der Master-Zweig auf dem Ursprungsserver während der letzten Verbindung zu ihm aussah, überprüfen Sie den Ursprung / Master-Zweig. Wenn Sie und Ihr Partner an einem Problem gearbeitet haben und die iss53-Niederlassung gebucht haben, haben Sie möglicherweise Ihre eigene iss53-Niederlassung vor Ort. Diese Verzweigung auf dem Server verweist jedoch auf das Commit in origin / iss53.

Wenn Sie versuchen, auf zu klicken, wird zu diesem Zeitpunkt eine Fehlermeldung angezeigt. Tatsächlich hat Gianni jetzt eine Situation geschaffen, in der sein perfektes Ergebnis der Änderung den Verpflichtungen vor der Änderung widerspricht. Diese Regel hat eine Konsequenz, die vor allem nach komplexen Fusionen vorschlägt, ausgeführt zu werden große Menge prüft und überprüft, ob die Zusammenführung korrekt ist, bevor Sie auf klicken. Sobald der Push tatsächlich ausgeführt wurde, wird das Ändern der Zusammenführung zu einer trivialen Operation.

Die Verwaltung von Zweigniederlassungen in einem verteilten System unterscheidet sich grundlegend von der zentralen Verwaltung, bei der eine Zweigniederlassung lediglich eine „intelligente Kopie“ des Versionskontrollordners ist. Auf konzeptioneller Ebene ist eine Verzweigung eine „Code-Zeichenfolge“, die durch Zusammenführungsoperationen unabhängig entworfen und mit anderen Code-Zeichenfolgen synchronisiert werden kann. Im Gegenteil, bei Distributed fehlt dieses Bedürfnis völlig, da der Begriff "Codezeile" der Struktur eines Distributed Repository inhärent ist. Der Add-In-Prozess gibt an, welche Änderungen beim nächsten Festschreiben berücksichtigt werden sollen, und wird entweder verwendet, um "neue Dateien hinzuzufügen" oder um "Dateien hinzuzufügen, die sich bereits im Repository befinden, aber geändert wurden".

All dies ist wahrscheinlich verwirrend. Schauen wir uns ein Beispiel an. Ich habe ein Remote-Repository auf GitHub https://github.com/n0tb0dy/RemoreBranches erstellt

Dort habe ich drei Commits gemacht


Wenn Sie ein Remote-Repository klonen, wird es von Git automatisch benannt herkunft, nimmt alle Daten von dort und erstellt einen Zeiger auf das, worauf die Verzweigung zeigt meisterund nenne es lokal herkunft / Meister  (aber du kannst es nicht bewegen). Git wird Sie auch zu Ihrem eigenen Zweig machen. meister, die an der gleichen Stelle wie der Zweig beginnen wird meister  in herkunftSie haben also etwas, mit dem Sie arbeiten können.

Tatsächlich werden alle hinzugefügten Dateien einem bestimmten Bereich hinzugefügt, der als Staging-Bereich bezeichnet wird und die Änderungen enthält, die beim nächsten Festschreiben berücksichtigt werden sollen. Am Ende der vorherigen Vorgänge wird das Beispielrepository angezeigt, wie in der folgenden Abbildung dargestellt, in der der Unterschied zum zentralisierten System dargestellt ist.

Die Tatsache, dass lokale Repositorys vorhanden sind, impliziert, dass zwei separate Entwickler lokale Provisionen vom selben Vater erstellt haben und daher zwei verschiedene Codezeilen haben: eine für Entwickler oder beide, die in ihrer lokalen Niederlassung gearbeitet haben.

"Herkunft" ist kein besonderer Name

Dies ähnelt dem Namen des Hauptzweigs, der standardmäßig beim Erstellen eines lokalen Repositorys angegeben wird. Genau wie eine Niederlassung meister  Wird standardmäßig auf Befehl erstellt git Init, so wie der Standardname verwendet wird herkunft  auf Befehl git-Klon. Wenn Sie den Befehl git clone –o booyah eingeben, erhalten Sie booyah / master als Standard-Remote-Zweig.

Diese Situation ist nutzlos und nur dann sinnvoll, wenn Sie den Inhalt des Repositorys zu einem früheren Zeitpunkt anzeigen möchten. Es wird jedoch nicht empfohlen, es für die Arbeit zu verwenden und andere Änderungen vorzunehmen. Wenn man von einem Zeiger spricht, handelt es sich um eine einfache Variable, die auf ein bestimmtes Commit verweist und normalerweise als Zweig bezeichnet wird. Tatsächlich ist die Verzweigung keine „intelligente Kopie“ des Ordners, sondern nur ein Zeiger, der auf ein bestimmtes Commit hinweist und es Ihnen ermöglicht, einen „Shutshot“ dieses Commits zu erstellen.

In diesem Fall müssen Sie zwei separate Codezeilen lokal speichern: die Master-Codezeile und die Codezeile, in der der Fehler behoben wird. Im zentralisierten Modus ist diese Option nicht verfügbar. Die einzige Analogie besteht darin, einen Zweig auf dem Server zu erstellen, der jedoch für das gesamte Team sichtbar ist. Geben Sie an dieser Stelle einfach den Namen des Zweigs an.

Und so zurück zu unseren ... Verpflichtungen. In einem Remote-Repository sehen sie folgendermaßen aus

Das team git holen  empfängt nur Aktualisierungen von einem Server, den Sie noch nicht haben, und ändert Ihr Arbeitsverzeichnis in keiner Weise. Dieser Befehl empfängt einfach die Daten und ermöglicht es Ihnen, zu entscheiden, was Sie damit tun möchten (mit Ihren Daten kombinieren, bearbeiten usw.).

In diesem Fall ist klar, dass der neu erstellte Zweig nur lokal ist und daher nicht in der Quelle veröffentlicht wird. Auf der Registerkarte Commits finden Sie eine ausführlichere Erläuterung. Dadurch wird der erstellte Zweig nur im lokalen Repository erstellt und es wird niemand angezeigt. Mit zwei lokalen Zweigen und dann zwei Zeigern wird das lokale Repository nach zwei Festschreibungen für den lokalen Zweig und Festschreibungen für den Hauptzweig angezeigt.

Die vorherige Abbildung zeigt, wie Sie den Zweig zusammenführen, in dem der Hauptfehler behoben ist. Sobald jeder Konflikt gelöst ist, müssen Sie mit der Lösung einen neuen Commit durchführen. Wie Sie sehen, ähnelt das Ergebnis der Lösung von Konflikten, die von zwei Entwicklern verursacht wurden, die dieselbe Datei in ihrer jeweiligen Datei geändert haben lokale RepositoriesDas Konzept ist ähnlich. Im vorherigen Fall ist ein Konflikt zwischen dem lokalen Master und dem fernen Master aufgetreten. In diesem Fall tritt ein Konflikt zwischen zwei lokalen Zweigen auf.

Das team git ziehen , in den meisten Fällen, führt die empfangenen Daten sofort mit Ihren zusammen.

Normalerweise ist es besser, nur den Befehl git fetch und den Befehl git merge zu verwenden, um den Zusammenführungsprozess selbst zu steuern.

Löschen Sie gelöschte Zweige

Natürlich meine ich das Löschen von Filialen auf einem Remote-Server

Nach dem Lösen von Konflikten zwischen lokalen Zweigen können zusätzliche Konflikte im Assistenten auftreten, die von anderen Entwicklern verursacht wurden, die dieselben Dateien wie in der folgenden Abbildung geändert haben. Das Ergebnis ist unten dargestellt. In diesem Fall haben wir zwei lokale Niederlassungen und eine entfernte, alle Zusammenführungen sind abgeschlossen, und dann können wir auf das zentrale Repository klicken.

Lokale Affiliate-Effekte für andere Entwickler

Oft sind lokale Zweige, die zur Korrektur von Fehlern oder Experimenten verwendet werden, nach dem Zusammenführen nicht mehr sinnvoll und werden gelöscht. Die Löschoperation löscht einfach den Zeiger, aber alle festgeschriebenen Verpflichtungen bleiben immer bestehen. Ein interessanter Aspekt ist, zu verstehen, was andere Entwickler sehen, wenn sie die Entwickleränderungen, die eine lokale Zusammenführung bewirkt haben, herausziehen und herausziehen. Mal sehen, was mit einem anderen Teamentwickler passiert.

$ git push origin - Serverfix löschen


Hop! Und der Zweig auf dem Remote-Server verschwand. Im Grunde genommen entfernt dieser Befehl jedoch einfach den Verzweigungszeiger auf dem Remote-Server. Der Git-Server speichert weiterhin alle Informationen zu Commits, bis Sie den Garbage Collection-Befehl ausführen.

Dies sieht ein anderer Entwickler. Diese Situation führt oft dazu, dass die Leute keine lokalen Niederlassungen nutzen, um das zentrale Repository nicht zu komplizieren, aber dies beraubt viele der Vorteile dieses Tools. Angenommen, der zweite Entwickler beklagt, dass die Situation in seinem Repository verwirrt ist, weil der vom ersten Entwickler erstellte lokale Zweig die Repository-Struktur komplexer gemacht hat. Wenn alle Entwickler lokale Zweige verwenden, kann das zentrale Repository möglicherweise nicht mehr verwaltet werden.

Die Situation ist ähnlich wie in der vorherigen Situation. Da alle Effekte mit dem Ordner-Snapshot-Tool assimiliert werden können, das das Differential mit dem vorherigen Status für jedes Commit beibehält, können alle diese Informationen verwendet werden, um Differentialänderungen für verschiedene Väter erneut anzuwenden. Bei lokalen Zweigen, die durch Patches beschränkt sind, treten häufig keine Konflikte auf, und der Vorgang wird erfolgreich abgeschlossen.