Ein Ersatz dafür git merge
überschreibt nicht verfolgte Dateien
Die folgenden Kommentare verwenden 'FOI' für die 'Dateien von Interesse', die Dateien, die
- existieren in der Spenderbranche,
- existieren nicht im empfangenden Zweig,
- und blockieren die Zusammenführung, weil sie in Ihrem Arbeitsverzeichnis vorhanden und nicht verfolgt sind.
git checkout -f donor-branch # replace FOI with tracked `donor` versions
git checkout receiving-branch # FOI are not in `receiving`, so they disapppear
git merge donor-branch # now the merge works
Ein Ersatz dafür git pull
überschreibt nicht verfolgte Dateien
pull = fetch + merge
Also git fetch
folgen wir dem git checkout -f, git checkout, git merge
obigen Trick.
git fetch origin # fetch remote commits
git checkout -f origin/mybranch # replace FOI with tracked upstream versions
git checkout mybranch # FOI are not in mybranch, so they disapppear
git merge origin/mybranch # Now the merge works. fetch + merge completes the pull.
Ausführliche Erklärung
git merge -f
existiert nicht, git checkout -f
tut es aber .
Wir werden git checkout -f
+ verwenden git checkout
, um die interessierenden Dateien zu entfernen (siehe oben), und dann kann Ihre Zusammenführung normal fortgesetzt werden.
Schritt 1. Dieser Schritt ersetzt zwangsweise nicht verfolgte FOI durch verfolgte Versionen des Spenderzweigs (er überprüft auch den Spenderzweig und aktualisiert den Rest des Arbeitsverzeichnisses).
git checkout -f donor-branch
Schritt 2. In diesem Schritt wird der FOI entfernt, da er in unserem aktuellen (Spender-) Zweig verfolgt wird und in dem Zweig, zu dem receiving-branch
wir wechseln, nicht vorhanden ist.
git checkout receiving-branch
Schritt 3. Nachdem das FOI nicht vorhanden ist, werden beim Zusammenführen im Spenderzweig keine nicht verfolgten Dateien überschrieben, sodass keine Fehler angezeigt werden.
git merge donor-branch