Git Mark File As Binary Optionen


Git gewöhnt in der Regel richtig, ob ein Blob Text oder Binärdaten enthält, indem er den Anfang des Inhalts untersucht. Allerdings können Sie manchmal ihre Entscheidung überschreiben, entweder weil ein Blob Binärdaten später in der Datei enthält oder weil der Inhalt, während er technisch aus Textzeichen besteht, für einen menschlichen Leser undurchsichtig ist. Zum Beispiel enthalten viele Postscript-Dateien nur ascii Zeichen, aber produzieren laute und sinnlose diffs. Der einfachste Weg, eine Datei als Binär zu markieren, besteht darin, das diff-Attribut in der. gitattributes-Datei zu löschen: Dies führt dazu, dass git Binärdateien unterscheiden (oder ein binärer Patch, wenn binäre Patches aktiviert sind) anstelle eines regulären Diffs. Zusammenfassend: spezifizieren Sie - diff in. gitattributes. Aus der Box kann git problemlos Binärdateien in den Index einfügen und sie auch auf effiziente Weise speichern, es sei denn, Sie verwenden häufige Updates auf großen, unkomprimierbaren Dateien. Die Probleme beginnen, wenn git Diffs erzeugen und verschmelzen muss: git kann keine sinnvollen Diffs erzeugen oder Binärdateien in irgendeiner Weise zusammenführen, die sinnvoll sein könnten. Also alle Merges, Rebases oder Cherrypicks, die eine Änderung an einer Binärdatei beinhalten, werden Sie dazu veranlassen, eine manuelle Konfliktlösung auf dieser Binärdatei zu erstellen. Sie müssen entscheiden, ob die Binärdatei Änderungen sind selten genug, dass Sie mit der zusätzlichen manuellen Arbeit, die sie verursachen können im normalen Git Workflow mit Merge, Rebases, Cherrypicks leben. Antwort von Jan 15 11 bei 0:21 Ich weiß nicht von irgendwelchen Werkzeugen, die versuchen, Diffs von Binärdateien für Versionskontrolle zu speichern, aber es ist bemerkenswert, dass Git dies auch nicht für Textdateien macht. Git speichert Dateien als Blobs, und es macht einen Unterschied zwischen ihnen, wenn es braucht. Wenn Sie auf der Suche nach Versionskontrolle auf so etwas wie PhotoshopIllustrator Dokumente, GridIron Flow könnte der Trick für Sie tun. Wenn Sie versuchen, sie in Synchronisierung zwischen Maschinen zu halten, können Dropbox oder Rsync damit umgehen, aber sie werden intelligente Diffing machen. Antwortete Jan 15 11 bei 0: 15DESCRIPTION Dieser Befehl aktualisiert den Index mit dem aktuellen Inhalt, der in der Arbeitsstruktur gefunden wird, um den Inhalt vorzubereiten, der für das nächste Commit inszeniert wird. Es fügt in der Regel den aktuellen Inhalt der vorhandenen Pfade als Ganzes hinzu, aber mit einigen Optionen kann es auch verwendet werden, um Inhalte nur mit einem Teil der Änderungen hinzuzufügen, die an die angewandten Arbeitsbaumdateien vorgenommen wurden, oder Pfade entfernen, die im Arbeitsbaum nicht vorhanden sind nicht mehr. Der Index enthält einen Schnappschuss des Inhalts des Arbeitsbaums, und es ist dieser Schnappschuss, der als Inhalt des nächsten Commit genommen wird. Nach dem Ändern des Arbeitsbaums und vor dem Ausführen des Commit-Befehls müssen Sie den Befehl add verwenden, um dem Index neue oder geänderte Dateien hinzuzufügen. Dieser Befehl kann mehrmals vor einem Commit durchgeführt werden. Es fügt nur den Inhalt der angegebenen Datei (en) zu dem Zeitpunkt hinzu, zu dem der Add-Befehl ausgeführt wird, wenn nachfolgende Änderungen in das nächste Commit aufgenommen werden sollen, dann müssen Sie git add erneut ausführen, um den neuen Inhalt zum Index hinzuzufügen. Der Befehl git status kann verwendet werden, um eine Zusammenfassung zu erhalten, welche Dateien Änderungen haben, die für das nächste Commit inszeniert werden. Der Befehl git add wird standardmäßig keine ignorierten Dateien hinzufügen. Wenn irgendwelche ignorierten Dateien explizit auf der Befehlszeile angegeben wurden, wird git add mit einer Liste von ignorierten Dateien fehlschlagen. Ignorierte Dateien, die durch Verzeichnisrekursion oder Dateinamen-Globbing, die von Git ausgeführt werden, erhalten werden (zitieren Sie Ihre Globs vor der Shell) werden stillschweigend ignoriert. Der Befehl git add kann verwendet werden, um ignorierte Dateien mit der Option - f (force) hinzuzufügen. Bitte sehen Sie git-commit1 für alternative Möglichkeiten, Inhalte zu einem Commit hinzuzufügen. Dateien zum Hinzufügen von Inhalt aus. Fileglobs (z. B..c) können gegeben werden, um alle übereinstimmenden Dateien hinzuzufügen. Auch ein führender Verzeichnisname (zB dir zum Hinzufügen von dirfile1 und dirfile2) kann gegeben werden, um den Index zu aktualisieren, um dem aktuellen Zustand des Verzeichnisses als Ganzes zu entsprechen (zB spezifiziert dir wird nicht nur eine Datei dirfile1 aufgezeichnet, die im Arbeitsbaum geändert wurde Datei dirfile2 hinzugefügt, um die Arbeits-Baum, sondern auch eine Datei dirfile3 aus dem Arbeitsbaum entfernt. Beachten Sie, dass ältere Versionen von Git verwendet, um entfernte Dateien zu ignorieren verwenden --no-all Option, wenn Sie modifizierte oder neue Dateien hinzufügen möchten, aber ignoriert entfernt Don8217t fügt die Datei (en) hinzu, zeigen sie einfach an, ob sie existieren und sie werden ignoriert. Eine Hinzufügung von sonst ignorierten Dateien Hinzufügen von modifizierten Inhalten in den Arbeitsbaum interaktiv zum Index. Eine optionale Pfadargumente können geliefert werden, um den Betrieb auf eine Teilmenge zu begrenzen Des Arbeitsbaums Siehe 8220Interaktiver Modus8221 für Details Interaktive Auswahl von Patches zwischen dem Index und dem Arbeitsbaum und fügt sie dem Index hinzu. Dies gibt dem Benutzer eine Chance, den Unterschied zu überprüfen, bevor er modifizierte Inhalte zum Index hinzufügt. Dies führt effektiv dazu - interaktiv. Aber umgeht das erste Befehlsmenü und springt direkt zum Patch-Unterbefehl. Weitere Informationen finden Sie unter 8220Interaktiver Modus8221. Öffnen Sie die diff gegen den Index in einem Editor und lassen Sie den Benutzer bearbeiten. Nachdem der Editor geschlossen war, passen Sie die Hunk-Header an und wenden den Patch auf den Index an. Die Absicht dieser Option besteht darin, die Zeilen des Patches auszuwählen und auszuwählen, oder um den Inhalt der zu inszenierenden Zeilen zu ändern. Dies kann schneller und flexibler sein als der interaktive Hunkwähler. Allerdings ist es leicht, sich selbst zu verwirren und einen Patch zu erstellen, der nicht für den Index gilt. Weitere Informationen finden Sie unter BEARBEITEN VON PATCHES. Aktualisiere den Index genau dort, wo er bereits einen Eintrag hat, der mit ltpathspecgt übereinstimmt. Dies entfernt und ändert auch Indexeinträge, um dem Arbeitsbaum zu entsprechen, aber fügt keine neuen Dateien hinzu. Wenn bei der Option - u keine ltpathspecgt angegeben wird, werden alle verfolgten Dateien im gesamten Arbeitsbaum aktualisiert (alte Versionen von Git verwendet, um das Update auf das aktuelle Verzeichnis und seine Unterverzeichnisse zu beschränken). Aktualisiere den Index nicht nur dort, wo der Arbeitsbaum eine Datei hat, die mit ltpathspecgt übereinstimmt, sondern auch wo der Index bereits einen Eintrag hat. Dies fügt hinzu, modifiziert und entfernt Indexeinträge, um dem Arbeitsbaum zu entsprechen. Wenn keine ltpathspecgt gegeben wird, wenn - A eine Option verwendet wird, werden alle Dateien im gesamten Arbeitsbaum aktualisiert (alte Versionen von Git verwendet, um das Update auf das aktuelle Verzeichnis und seine Unterverzeichnisse zu beschränken). Aktualisieren Sie den Index, indem Sie neue Dateien hinzufügen, die dem Index unbekannt sind, und Dateien, die im Arbeitsbaum geändert wurden, aber ignorieren Sie Dateien, die aus dem Arbeitsbaum entfernt wurden. Diese Option ist ein no-op, wenn kein ltpathspecgt verwendet wird. Diese Option ist in erster Linie zu helfen Benutzer, die verwendet werden, um ältere Versionen von Git, deren git add ltpathspecgt82308203 war ein Synonym für git add --no-all ltpathspecgt82308203, d. h. ignoriert entfernte Dateien. Notiere nur die Tatsache, dass der Pfad später hinzugefügt wird. Ein Eintrag für den Pfad wird ohne Inhalt in den Index gelegt. Dies ist nützlich, um unter anderem den unstufigen Inhalt solcher Dateien mit git diff zu zeigen und sie mit git commit - a zu begehen. Don8217t fügen Sie die Datei (en), aber nur aktualisieren ihre stat () Informationen in den Index. Wenn einige Dateien aufgrund von Fehlern, die sie indizierten, nicht hinzugefügt werden konnten, wird der Vorgang nicht abgebrochen, sondern weiterhin die anderen hinzugefügt. Der Befehl wird weiterhin mit dem Status ungleich Null beendet. Die Konfigurationsvariable add. ignoreErrors kann auf true gesetzt werden, um das Standardverhalten zu machen. Diese Option kann nur zusammen mit --dry-run verwendet werden. Mit dieser Option kann der Benutzer überprüfen, ob eine der angegebenen Dateien ignoriert werden würde, egal ob sie bereits im Arbeitsbaum vorhanden sind oder nicht. Überschreiben Sie das ausführbare Bit der hinzugefügten Dateien. Das ausführbare Bit wird nur im Index geändert, die Dateien auf dem Datenträger bleiben unverändert. Diese Option kann verwendet werden, um Befehlszeilenoptionen aus der Liste der Dateien zu trennen (nützlich, wenn Dateinamen für Befehlszeilenoptionen verwechselt werden können). Konfiguration Die optionale Konfigurationsvariable core. excludesFile zeigt einen Pfad zu einer Datei an, die Muster von Dateinamen enthält, die von git-add ausgeschlossen sind, ähnlich wie GITDIRinfoexclude. Muster in der Ausschlussdatei werden zusätzlich zu denen in infoexclude verwendet. Siehe gitignore5 Fügt Inhalte aus allen. txt-Dateien unter das Dokumentationsverzeichnis und seine Unterverzeichnisse hinzu: Beachten Sie, dass das Sternchen aus der Shell in diesem Beispiel zitiert wird, so dass der Befehl die Dateien aus den Unterverzeichnissen des Dokumentationsverzeichnisses enthält. Berücksichtigt das Hinzufügen von Inhalten aus allen git-.sh-Skripten: Da dieses Beispiel die Shell erweitern kann, um das Asterisk zu erweitern (d. h. Sie werden die Dateien explizit auflisten), berücksichtigt es nicht subdirgit-foo. sh. Interaktiver Modus Wenn der Befehl in den interaktiven Modus wechselt, zeigt er die Ausgabe des Statusunterbefehls an und geht dann in seine interaktive Befehlsschleife. Die Befehlsschleife zeigt die Liste der verfügbaren Unterbefehle an und gibt eine Aufforderung an. Im Allgemeinen, wenn die Aufforderung endet mit einem einzigen gt. Sie können nur eine der gewählten Entscheidungen auswählen und zurückkehren, wie folgt: Sie können auch s oder sta oder Status oben sagen, solange die Wahl einzigartig ist. Die Hauptbefehlsschleife hat 6 Unterbefehle (plus help und quit). Dies zeigt die Änderung zwischen HEAD und Index (d. h. was wird begangen, wenn Sie sagen, git commit), und zwischen Index und Arbeits-Baum-Dateien (; d. h. was Sie könnte weiter vor Git Commit mit Git hinzufügen) für jeden Pfad. Eine Beispielausgabe sieht so aus: Es zeigt, dass foo. png Unterschiede von HEAD hat (aber das ist binär, so dass Zeilenzähler nicht angezeigt werden kann) und es gibt keinen Unterschied zwischen indizierter Kopie und der Arbeitsbaumversion (wenn auch die Arbeitsbaumversion vorhanden wäre Anders, binär wäre anstelle von nichts gezeigt worden). Die andere Datei, git-add interactive. perl, hat 403 Zeilen hinzugefügt und 35 Zeilen gelöscht, wenn Sie festlegen, was im Index ist, aber die Arbeitsbaumdatei hat weitere Änderungen (eine Addition und eine Löschung). Dies zeigt die Statusinformationen an und gibt eine Updategtgt-Eingabeaufforderung aus. Wenn die Aufforderung endet mit doppelten gtgt. Du kannst mehr als eine Auswahl machen, mit Whitespace oder Komma verkettet. Auch können Sie reichen. Z. B. 2-5 7,9 zur Auswahl von 2,3,4,5,7,9 aus der Liste. Wenn die zweite Zahl in einem Bereich weggelassen wird, werden alle verbleibenden Patches genommen. Z. B. 7- um 7,8,9 aus der Liste zu wählen. Sie können sagen, alles zu wählen. Was du gewählt hast, wird dann mit hervorgehoben. Wie folgt: Um die Selektion zu entfernen, präfix die Eingabe mit - wie folgt: Nach der Auswahl antwortest du mit einer leeren Zeile, um den Inhalt der Arbeitsbaumdateien für ausgewählte Pfade im Index zu veranstalten. Dies hat eine sehr ähnliche UI zu aktualisieren. Und die gestuften Informationen für ausgewählte Pfade werden auf die der HEAD-Version zurückgesetzt. Das Zurücksetzen neuer Wege macht sie untrackiert. Dies hat eine sehr ähnliche Benutzeroberfläche zu aktualisieren und wiederherzustellen. Und können Sie untrackierte Pfade zum Index hinzufügen. Damit können Sie einen Pfad aus einem Status wie Auswahl auswählen. Nach der Auswahl des Pfades, stellt es die diff zwischen dem Index und der Arbeitsbaum-Datei und fragt Sie, wenn Sie die Änderung der einzelnen Hunk vorstellen wollen. Sie können eine der folgenden Optionen auswählen und zurückgeben: Nach der Entscheidung über das Schicksal für alle Hunks, wenn es irgendwelche Hunk, die gewählt wurde, wird der Index mit den ausgewählten Hunks aktualisiert. Sie können die Rückgabe hiermit zurückgeben, indem Sie die Konfigurationsvariable interactive. singleKey auf true setzen. Hier können Sie überprüfen, was begangen wird (d. H. Zwischen Kopf und Index). BEARBEITEN VON PATCHES Wenn Sie git add - e aufrufen oder e aus dem interaktiven Hunkwähler auswählen, wird ein Patch in Ihrem Editor geöffnet, nachdem der Editor beendet wurde. Das Ergebnis wird auf den Index angewendet. Sie sind frei, beliebige Änderungen an dem Patch zu machen, aber beachten Sie, dass einige Änderungen möglicherweise verwirrende Ergebnisse haben oder sogar zu einem Patch führen, der nicht angewendet werden kann. Wenn du den Vorgang ganz abbrechen willst (d. h. Bühne nichts Neues im Index), lösche einfach alle Zeilen des Patches. Die folgende Liste beschreibt einige häufige Dinge, die Sie in einem Patch sehen können und welche Bearbeitungsvorgänge auf ihnen sinnvoll sind. Der hinzugefügte Inhalt wird durch Zeilen, die mit 43 beginnen, dargestellt. Sie können das Hinzufügen von Hinzufügungslinien verhindern, indem Sie sie löschen. Der entfernte Inhalt wird durch Zeilen dargestellt, die mit - beginnen. Sie können verhindern, dass die Entfernung durch die Umwandlung der - zu einem (Raum). Geänderter Inhalt wird durch Zeilen dargestellt (Entfernen des alten Inhalts), gefolgt von 43 Zeilen (Hinzufügen des Ersatzinhalts). Sie können das Staging der Änderung verhindern, indem Sie - Zeilen zu konvertieren und 43 Zeilen entfernen. Achten Sie darauf, dass das Ändern nur die Hälfte des Paares wahrscheinlich zu verwirrenden Änderungen am Index führen wird. Es gibt auch komplexere Operationen, die durchgeführt werden können. Aber Vorsicht darauf, dass, weil der Patch nur auf den Index angewendet wird und nicht der Arbeitsbaum, wird der Arbeitsbaum erscheinen, um die Änderung im Index rückgängig zu machen. Zum Beispiel wird die Einführung einer neuen Zeile in den Index, der weder der HEAD noch der Arbeitsbaum ist, die neue Zeile für Commit einrichten, aber die Zeile scheint im Arbeitsbaum zurückzukehren. Vermeiden Sie es, diese Konstrukte zu benutzen, oder tun Sie dies mit äußerster Vorsicht. Entfernen von unberührten Inhalten Inhalt, der sich nicht zwischen dem Index und dem Arbeitsbaum unterscheidet, kann auf Kontextzeilen angezeigt werden, beginnend mit einem (Leerzeichen). Sie können Kontextzeilen für die Entfernung durch Umwandlung des Raumes in ein -. Die resultierende Arbeitsbaumdatei wird angezeigt, um den Inhalt erneut hinzuzufügen. Ändern vorhandener Inhalte Man kann auch Kontextzeilen ändern, indem man sie zum Entfernen (durch Umwandlung in -) inszeniert und eine 43 Zeile mit dem neuen Inhalt hinzufügt. Ebenso kann man 43 Zeilen für bestehende Ergänzungen oder Modifikationen ändern. In allen Fällen erscheint die neue Änderung im Arbeitsbaum. Sie können auch neue Inhalte hinzufügen, die nicht im Patch vorhanden sind, fügen Sie einfach neue Zeilen hinzu, die jeweils mit 43 beginnen. Der Zusatz wird im Arbeitsbaum wieder angezeigt. Es gibt auch mehrere Operationen, die vollständig vermieden werden sollten, da sie den Patch unmöglich machen können: Hinzufügen von Kontext () oder Entfernen (-) Zeilen Löschen von Kontext - oder Entfernungslinien, die den Inhalt von Kontext - oder Entfernungslinien ändern. Konfliktlösung Die Konfliktlösungsprozesse In git ist für jeden git-Befehl etwas anders. Dieses Tutorium wird Sie durch die großen Variationen gehen. Die man-Seite für git-merge (1) gibt die meisten Informationen über den Konfliktlösungsprozess. Sehen Sie sich die beiden Abschnitte an: WIE KONFLIKTE SIND VORGESEHEN UND WIE KONFLIKTE AUFGEFÜHRT WERDEN. Allerdings rebase, bin und bewerben auch eine Konfliktlösung Prozess ist anders, aber nicht so gut dokumentiert. Beachten Sie jedoch, dass die Dokumentation für git kontinuierlich verbessert, also ist es eine gute Idee, es zu lesen, um zu sehen, was dort ist. Welche Befehle könnten uns Konflikte geben Die Mergie, natürlich: Git Version Git verbessert sich ständig. Als Referenz wurde die Ausgabe der Befehle in diesem Dokument mit der folgenden git-Version erzeugt: Setup: merge. conflictstyle diff3 Vor dem Tauchen in die Konfliktlösung müssen wir uns die Merge. conflictstyle-Einstellung ansehen. Es ist in git-config (1) zusammen mit mehreren anderen Merge dokumentiert. Einstellungen, die interessant sein könnten, um zu untersuchen. Merge. conflictstyle hat zwei mögliche Werte. Merge ist die Voreinstellung und dies gibt Zwei-Wege-Konfliktinformationen in einer Konfliktdatei. Diff3 ist der andere mögliche Wert, und dies gibt Drei-Wege-Konflikt Informationen, die viel mehr hilfreich sein kann. Heres ein Beispiel. Zuerst können wir mit dem Standardwert des Zusammenführens losgehen: Das gibt uns Zwei-Wege-Konfliktlösungsmarkierungen, die nur den aktuellen Zustand jedes Zweigs anzeigen: Umschalten auf diff3: Und wir bekommen dreidimensionale Konfliktlösungsmarkierungen, die den ursprünglichen Zustand mit einschließen Der aktuelle Zustand eines jeden Zweigs: Die ursprüngliche Datei vor Änderungen hatte Hallo, Original .. Der Master (HEAD) Zweig hat Hallo, Master ändern, und die b1 Niederlassung hat Hallo, Zweig b1 ändern .. Diese Drei-Wege-Diff kann sein Sehr hilfreich bei der Bestimmung, was wirklich verändert hat, also empfehle ich die Arbeit mit Merge. conflictstyle auf diff3 gesetzt. Noch hilfsbereiter ist ein GUI-Merge-Tool wie kdiff3. Siehe git Mergetool unten für Details. Heres das Skript, das ich verwende, um eine Reihe von Konflikten zu erzeugen, um mit zu spielen. Git merge ist die mergiest von allen mergy git befehle. Auch wenn Sie vor allem Rebase verwenden oder bin, ist es eine gute Idee, einige Zeit damit zu verbringen, wie man Konflikte mit Git Merge lösen kann. Vieles von dem, was du hier lernst, wird zu den anderen Mergie-Befehlen übergehen. Denken Sie daran, dass es subtile Unterschiede gibt, die ganz nervig sein können. Angesichts der Einrichtung, die in einigen Konflikten oben beschrieben ist, können wir versuchen, b1 in den Master zu verschmelzen. Es ist wichtig zu beachten, dass Verschmelzung führt zu einem neuen Merge-Commit, dass zwei Eltern hat. Ein Konflikt in diesem Prozess hält also die Schaffung dieses Committs fest. Unser Ziel ist es, die Konflikte zu lösen, die Dateien zu ergänzen und hinzuzufügen. Merge lässt uns wissen, dass wir einige Konflikte haben. Der git-Status kann jederzeit verwendet werden, um zu sehen, welche unerwarteten Pfade eine Konfliktlösung benötigen: Beachten Sie, dass git uns auch einige grundlegende Anweisungen für den Umgang mit der Situation gibt: Fixieren Sie Konflikte und führen Sie git commit aus. Verwenden Sie git diff, um die Konflikte in einer Datei zu untersuchen: Beheben Sie die Konflikte An dieser Stelle können wir die gegensätzlichen Dateien bearbeiten und die Konflikte manuell lösen. Wenn es eine große Anzahl von Konflikten git Mergetool und ein GUI Merge-Tool wie kdiff3 machen die Dinge einfacher. Weitere Informationen finden Sie im Abschnitt "Git-Mergetool". Git bietet ein paar einfache Konfliktlösungsfunktionen an. Wir können alle Änderungen von der Zweigniederlassung nehmen, die wir mit der Kasse in den Meister verschmelzen - das heißt, wir können auch mit allen Änderungen vom Meister aus mit der Checkout fahren --ours: Wenn die Konfliktlösung in einer Datei aus der Hand kommt und Wir wollen anfangen, checkout - m wird unsere Änderungen rückgängig machen: Es gibt kein Redo, also wenn du viel Zeit damit verbracht hast, an den Konflikten in einer Akte zu arbeiten, denkst du sorgfältig, bevor du das machst. Lass uns mit ihr gehen für hallo. txt Git diff lässt uns wissen, dass es keine Konflikte mehr gibt. So können wir hallo. txt zum Index hinzufügen und den Status überprüfen, um zu sehen, welche Dateien übrig sind. Lass uns weiter gehen und den Rest der Konflikte lösen, indem wir mit uns gehen oder mit ihnen zusammenkommen. Complete Der Commit-Git-Status zeigt uns, dass es keine weiteren unerwarteten Pfade gibt (ungelöste Konflikte), so dass wir den Zusammenschluss beenden können. Abbruch eines Zusammenbruchs Dies führt dich zurück zu dem, wo du warst, bevor du den Zusammenschluss versuchst. Sei sehr vorsichtig mit diesem, wie es irgendwelche Arbeit verliert, die Sie in Ihrer Arbeitskopie getan haben können und alles, was Sie im Index inszeniert haben könnten. Wenn Sie Teilweise durch einen Zusammenschluss sind, könnte dies ein wenig Extrem sein, wenn Sie nicht einfach nur alles verlieren wollen. Beim Umgang mit einem Konflikt in Git Merge: Verwenden Sie git Status und git diff, um herauszufinden, was schief gelaufen ist. Beheben Sie die Konflikte durch eine der folgenden Methoden: Bearbeiten Sie jede Konfliktdatei mit Ihrem Lieblings-Editor. Git Mergetool und ein passendes Merge GUI Tool wie kdiff3. Git checkout --theirs oder git checkout --ours git checkout - m, um Konfliktlösung auf bestimmte Dateien rückgängig zu machen. (SORGFÄLTIG) git füge die aufgelösten Dateien hinzu. Wenn die Dinge abgespritzt werden, benutze git merge --abort, um vor dem Zusammenführen zu beginnen. (BEFRAGEN) git verpflichten zu beenden und aus dem Merge-Modus. Git mergetool kombiniert mit kdiff3 bietet einen visuellen Weg, um mit schwierigen Zusammenführungskonflikten umzugehen. Solange du kdiff3 installiert hast, sollte git mergetool es finden. Wenn nicht, können Sie das gewünschte Werkzeug als Option angeben: Oder Sie können die Einstellung persistent machen: Hinweis: kdiff3 ist nicht die einzige Wahl, die Sie bekommen haben. Aber es ist eines der besten. Versuchen Sie es zuerst, dann versuchen Sie die anderen und youll sehen, was ich meine. Ich habe getestet, weil das, was ich normalerweise für Diffs verwenden. Meld war nicht in der Lage, mit den Konflikten in meinem Testszenario umzugehen. Es hat auch keine Verschmelzung für mich gemacht. Kdiff3 erwies sich als weit überlegen. Die Datei mergetool. txt, die durch das Skript Some Conflicts erstellt wird, wurde speziell entwickelt, um die Fähigkeiten von git mergetool zu testen. Nach dem Ausführen dieses Skripts, versuchen Sie einen Merge und dann versuchen git Mergetool. Beachten Sie, dass es uns auffordert, Konflikte für jede Datei zu lösen. Hit enter und kdiff3 wird gestartet. Klicken Sie auf den Screenshot oben für eine Full-Size-Version. Über die Oberseite sind drei Versionen der Akte. Die Vorlage (A), der Hauptzweig (B) und der b1-Zweig (C). An der Unterseite ist die zusammengeführte Version mit Konflikten markiert. Sie können mit der rechten Maustaste auf Konflikte im unteren Bereich klicken und die gewünschte Version auswählen. Mit einer großen Anzahl von Konflikten kann dies viel schneller sein als das Entfernen von Konfliktlösungsmarkierungen mit einem Editor. Git mergetool ist wohl am besten für komplizierte konflikte. Wenn alles, was Sie tun möchten, eine oder andere Version Großhandel nehmen, können Sie dies in kdiff3 tun, aber git checkout --ours (oder - thehes) ist wahrscheinlich schneller. Beachten Sie auch, dass kdiff3 wahrscheinlich nicht binäre Dateien behandeln kann. Um die Zusammenführung abzuschließen, machen Sie alle Änderungen, die Sie wünschen, klicken Sie auf Speichern in kdiff3 und beenden Sie kdiff3. Dies wird die Änderungen und Bühne (add) sie für Commit machen. Git Mergetool neigt dazu, die. Verwenden Sie git Status, um sie zu finden. Sie können sie sicher löschen. (Git clean kann dafür verwendet werden, aber seien Sie vorsichtig mit ihm.) Windows Um Git zu finden, finden Sie kdiff3 in Windows, müssen Sie c: Program FilesKDiff3 zu Ihrer PATH Variable hinzufügen. Ive hatte gemischte Ergebnisse mit kdiff3 und Windows. Für einfache Testprojekte schien es gut zu funktionieren. Für komplexere Projekte mit langen Verzeichnisnamen und substituierten Laufwerksbuchstaben funktionierte es nicht. Für Probleme vorbereitet sein. Rebase ist ähnlich zu verschmelzen, aber anstelle von Commit, verwenden wir Rebase --continue (und manchmal - Skip), um die Rebase zu beenden. Angesichts der Einrichtung, die in einigen Konflikten oben beschrieben ist, können wir versuchen, den b1-Zweig auf dem Master zu rebilieren. Rebase lässt uns wissen, dass wir einige Konflikte haben. Der git-Status kann jederzeit verwendet werden, um zu sehen, welche unerwarteten Pfade eine Konfliktlösung benötigen: Beachten Sie, dass git uns einige grundlegende Anweisungen für den Umgang mit der Situation gibt: Beheben Sie Konflikte und führen Sie dann git rebase aus - gehen Sie fort. (Diese Anleitung fehlt der Stufe (Hinzufügen) Schritt in Git 1.8.1.) Verwenden Sie git diff, um die Konflikte in einer Datei zu untersuchen: Beheben Sie die Konflikte Wie bei der Zusammenführung können wir die gegensätzlichen Dateien bearbeiten und die Konflikte manuell lösen. Wenn es eine große Anzahl von Konflikten git Mergetool und ein GUI Merge-Tool wie kdiff3 machen die Dinge einfacher. Während der Rebasing bietet Git ein paar einfache Konfliktlösungsfunktionen. Wir können alle Änderungen von der Zweigniederlassung nehmen, die wir (b1) mit der Kasse - siebeln " Beachten Sie, dass dies rückwärts von dem ist, was Sie erwarten könnten, das ist das, was wir derzeit sind: Wir können auch mit allen Änderungen vom Ziel (upstream) des Rebases (Master) mit der Checkout --ours: Die Bedeutung von Ihre und unsere ist rückwärts, wenn sie sich neu fühlen. Wenn wir b1 ausgecheckt haben und wir auf den Meister rebilieren, ist ihr b1, und unser ist Meister. (Die Mann-Seite für git-checkout erwähnt, dass unsere bezieht sich auf Stufe 2 und ihre bezieht sich auf Stufe 3. Im nicht sicher, was das bedeutet, aber es könnte erklären, warum diese scheinen rückwärts. Versuchen Sie git ls-Dateien - u, um die Bühne zu sehen .) Wenn die Konfliktlösung in einer Akte aus der Hand kommt und wir anfangen wollen, wird der Checkout - m unsere Änderungen rückgängig machen: Es gibt kein Redo, also wenn du viel Zeit damit verbracht hast, an den Konflikten in einer Datei zu arbeiten, denkst du sorgfältig vor dem Tun Dies. Lets gehen mit ihren (von b1) für mergetool. txt. Git diff lässt uns wissen, dass es keine Konflikte mehr gibt. So können wir die Datei einfügen und hinzufügen und weiterfahren. Es gab zwei Commits auf dem Zweig b1. Wir haben die erste fixiert und fortgesetzt, und jetzt versucht git, das zweite Commit zu beherrschen und es gibt mehr Konflikte zu lösen. In diesem Fall lasst uns mit unseren (Herren) gehen, die die Veränderungen in b1 wegwerfen werden. Dieses Mal geht es weiter nicht. Der Grund ist, weil wir alle Änderungen in diesem besonderen Commit aus dem Zweig (b1) weggeworfen haben, der wiederverwendet wird. Also müssen wir git wissen lassen, dass wir wirklich das ganze Commit wegwerfen wollen. Verwenden Sie einfach - Skip: Und die Rebase ist komplett. Abbrechen einer Rebase Verwenden Sie rebase --abort: Das bringt Sie zurück zu, wo Sie waren, bevor Sie die Rebase ausprobiert haben. Sei sehr vorsichtig mit diesem, wie es irgendwelche Arbeit verliert, die Sie in Ihrer Arbeitskopie getan haben können und alles, was Sie im Index inszeniert haben könnten. Wenn Sie Teilweise durch eine Rebase sind, könnte dies ein wenig extreme sein, wenn Sie wirklich nur wollen, um alles zu verlieren. Beim Umgang mit einem Konflikt in Git Rebase: Verwenden Sie git Status und git diff, um herauszufinden, was schief gelaufen ist. Beheben Sie die Konflikte durch eine der folgenden Methoden: Bearbeiten Sie jede Konfliktdatei mit Ihrem Lieblings-Editor. Git checkout --theirs oder git checkout --ours Sei vorsichtig von der rückständigen Bedeutung von --theirs und --ours beim Rebasing. Überprüfen Sie die Datei, um sicherzustellen, dass Sie bekommen, was Sie wollten. Git checkout - m, um die Konfliktlösung auf bestimmte Dateien rückgängig zu machen. (BE ACHTUNG) Git Mergetool und ein passendes Merge GUI Tool wie kdiff3. Git füge die aufgelösten Dateien hinzu. Git rebase - fährt fort, die rebase fortzusetzen. Git Rebase - Skip in seltenen Situationen, wenn Sie sich entscheiden, wegzuwerfen alle Änderungen für ein einziges Commit aus dem Zweig wiederverwendet werden. Sei sehr vorsichtig mit dem Überspringen, um sicherzustellen, dass Änderungen arent verloren. Git rebase --abort, um zurück zu gehen, wo du vor der Rebase warst. (SORGFÄLTIG) git am -3 ist sehr ähnlich zu rebase. Angesichts des Setups, das in einigen Konflikten oben beschrieben ist, können Sie Patch-Dateien aus dem b1-Zweig generieren. Jetzt können wir die Patches auf Master mit git am -3 anwenden. Das -3 ist wichtig, da es einen 3-Wege-Merge anfordert. Ohne diese Option werden die Konflikte nicht in den entsprechenden Dateien angezeigt. Git diff wird nichts zeigen An dieser Stelle kannst du vorgehen und die gegensätzlichen Dateien bearbeiten und die Konflikte manuell lösen. Wenn Sie eine Zusammenführungs-GUI bevorzugen, versuchen Sie git mergetool. Wie bei Merge und Rebase, können Sie auch die Kasse - die Heiraten und --ours, um eine Version oder die andere in ihrer Gesamtheit zu nehmen. Denn git am, die Bedeutung von ihr und uns ist logisch. Ihr ist die Version aus dem Patch: Während unsere ist die im Master: Und Sie können Checkout - m verwenden, um jede Konfliktlösung, die Sie in einer Datei gemacht haben, rückgängig zu machen. Sei vorsichtig, da es keine Wiederholung gibt. Lets go mit der Version aus dem Patch für dieses Commit und weiter. Das Diff zeigt keine Konflikte, die es zu lösen gibt, also fügen wir hinzu und lassen Sie git wissen, dass wir fertig sind, Konflikte für diesen Patch zu lösen: Git bewegt sich auf den nächsten Patch und findet einige Konflikte. Lets go ahead und lehnen alle Änderungen von diesem Patch und gehen mit den Änderungen in Master (unsere). Wie bei rebase, weve effektiv gefragt, um einen ganzen Patch zu verwerfen, so müssen wir sagen, git wir sind es ernst zu überspringen. Und das ist es. Wie bei rebase, achten Sie auf die überspringungssituation. Abbrechen einer Git am -3 Verwenden Sie einfach am --abort: Verwenden Sie immer -3 mit git, um sicherzustellen, dass Sie Konfliktmarker bekommen. Verwenden Sie git status und git diff, um herauszufinden, was schief gelaufen ist. Beheben Sie die Konflikte durch eine der folgenden Methoden: Bearbeiten Sie jede Konfliktdatei mit Ihrem Lieblings-Editor. Git checkout --theirs oder git checkout --ours Git checkout - m, um die Konfliktlösung auf bestimmte Dateien rückgängig zu machen. (BE ACHTUNG) Git Mergetool und ein passendes Merge GUI Tool wie kdiff3. Git füge die aufgelösten Dateien hinzu. Git am - weiter fortsetzen. Git am - Skip in seltenen Situationen, wenn Sie sich entscheiden, alle Änderungen von einem einzigen Patch zu werfen. Sei sehr vorsichtig mit dem Überspringen, um sicherzustellen, dass Änderungen arent verloren. Git am --abort, um zurück zu gehen, wo du vor dem Zusammenführen warst. (SORGFÄLTIG) Im Grunde, Sie wollen git gelten, wenn Sie können. Die Konfliktlösungsfähigkeiten sind sehr begrenzt. Git am -3 ist deutlich besser und sollte nach Möglichkeit verwendet werden. Aber wenn du einen Patch bekommst, der nicht git-kompatibel ist, dann ist das wohl deine einzige Wahl. Angesichts der Einrichtung, die in einigen Konflikten oben beschrieben ist, können wir eine Patch-Datei von b1 gegen Master generieren. Und versuche es anzuwenden, um zu meistern. Vergessen Sie nicht zu verwenden - reject so gut bekommen. rej Dateien: Lets versuchen git Status, um herauszufinden, was passiert ist. Git status zeigt uns die. rej Datei, die erstellt wurde. Und es enthält nur den Hunk, der fehlgeschlagen ist: Um sich davon zu erholen, ist die einzige Möglichkeit, manuell das abgelehnte Hunk manuell anzuwenden. Alle netten Checkout - m, checkout --theirs, etc. Features sind nicht verfügbar bei der Anwendung gelten. Sobald Sie fertig sind, können Sie einfach hinzufügen und begehen, wenn Sie die Änderungen behalten möchten. Anwenden hat keinen Modus wie Merge und Rebase. Abbruch von Git anwenden Verwenden Sie git reset - hard. Sei sehr vorsichtig, denn das verliert alles, was du seit dem letzten Commit deinem Repo gemacht hast (HEAD). Bevorzugen git am -3 to git gelten. Verwenden Sie immer - reject mit git gelten, um sicherzustellen, dass Sie bekommen. Rej-Dateien, die Ihnen zeigen, welche Teile (Hunks) des Patches nicht angewendet werden können. Verwenden Sie den git-Status, um die. rej-Dateien zu finden. Beheben Sie die Konflikte, indem Sie die. rej-Dateien und die Zieldatei untersuchen und Änderungen mit einem Editor vornehmen. Git reset - hart, um die Anwendung abzubrechen. (SORGFÄLTIG) fügen Sie hinzu und verpflichten Sie die Änderungen entsprechend. Es ist wahrscheinlich am besten, um Konflikte mit git stash Pop zu vermeiden, indem man in Zweigen arbeitet. Aber wenn Sie in Konflikte mit Stash Pop laufen, Heres, wie man damit umgeht. Wenn wir den Stash mit widersprüchlichen Veränderungen im Master und dem Stash beenden, bekommen wir das: Beheben Sie die Konflikte Wie bei anderen Konfliktsituationen können wir die gegensätzlichen Dateien bearbeiten und die Konflikte manuell lösen. Git Mergetool funktioniert auch gut mit Stash Pop Konflikten. Obwohl git checkout --ours und --theirs funktioniert nicht mit stash pop, können wir immer noch checkout und geben sie an, welche version wir wollen. Wenn wir mit all den Änderungen vom Meister gehen wollen: Wir können auch mit allen Änderungen im Stash für eine Datei gehen: Und wenn du mit Konflikten wieder auf die Version zurückkehren willst, dann geht es gut. Stash Drop Sobald du die Konflikte gelöst hast, kannst du die verschobenen Änderungen manuell aus dem Stash mit Git Stash Drop entfernen. Fortsetzung Working Work aus dem Stash gegangen ist in der Regel in Arbeit, so an diesem Punkt können Sie weiterarbeiten, aber git Status wird ein bisschen seltsam mit unveränderten Pfade aussehen. Wenn das dich stört, kannst du git hinzufügen. Stellen Sie einfach sicher, dass Sie die Datei erneut hinzufügen, wenn Sie weitere Änderungen vornehmen. Abbruch eines Stash-Pop Um einen widersprüchlichen Stash-Pop abzubrechen und alle Arbeiten zu beenden, die du seit dem letzten Commit bevollmächtigt hast (das kann sehr gefährlich sein, wenn du dazu nehmst, viele Änderungen zu machen, ohne zu begehen, also sei sehr vorsichtig): Das bringt dich Zurück zum letzten Commit in Master. Das kann sehr gefährlich sein Besonders wenn du fertig bist git stash drop. Dann sind die verstopften Änderungen verloren. (Nicht wirklich, sie sind nur verwaist und können so lange wiederhergestellt werden, wie du kein gc machst.) Wenn du in der Mitte der Konfliktlösung warst, wirft du deine ganze Arbeit weg. Beim Umgang mit einem Konflikt in git stash Pop: Verwenden Sie git Status und git diff, um herauszufinden, was schief gelaufen ist. Beheben Sie die Konflikte durch eine der folgenden Methoden: Bearbeiten Sie jede Konfliktdatei mit Ihrem Lieblings-Editor. Git Mergetool und ein passendes Merge GUI Tool wie kdiff3. Git checkout master - Dateiname, um die Master-Version zu bekommen. Git checkout stash - filename, um die stash version zu bekommen. Git checkout - m, um die Konfliktlösung auf bestimmte Dateien rückgängig zu machen. (BE ACHTUNG) git füge die aufgelösten Dateien hinzu (optional). Git Stash Drop, wenn fertig zu lösen Konflikte, um die Änderungen aus dem Stash zu entfernen. Wenn die Dinge abgespritzt werden, benutze git reset - hart, um vor dem Stash Pop zu beginnen. (SORGFÄLTIG) Weiter wie gewohnt weiterarbeiten Konflikte und Auflösungen - Großer Grundartikel aus den Gitguys. Konfliktlösung in Git - Film zeigt, wie man git mergetool und die opendiff GUI benutzt, um Konflikte zu lösen. Git checkout - m datei - Erfahren Sie mehr über die Rückgängigmachung der Konfliktlösung mit git checkout - m Datei. Dies ist ein toller Beitrag von einem git dev. The way he talks about conflict resolution gives you more of a feel for what its all about. Careful examination of the merge section shows some ambiquity WRT whether or not git add is actually required. I think we need to track this down. It might mean that we would need to hand-edit one of the files to see a situation where add is required. Once this is sorted, determine whether this also affects the other sections. Examples for revert and cherry-pick. Or at least a quick summary of which of the big three they are most similar to, and any gotchas to watch out for. Work in git log --merge - p file. It shows the changes from the common point to where you are now. Might be useful in more complex situations. Copyright (C) 2013-2014, Ted Felix Permission is granted to copy, distribute andor modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. See gnu. orglicensesfdl. html for the full text of this license. lt - Back to my software page.

Comments