Wir haben ein Remote-Git-Repo, das wir normalerweise git push
auf unserem Dev-Server und dann git pull
auf unseren Live-Servern bereitstellen, um die neueste Push-Version des Repos zu erhalten.
Aber wenn wir ein paar Revisionen (ohne eine git pull
auf den Live-Servern) festgeschrieben und gepusht haben, wie können wir dann eine machen git pull
, die sich auf die ältere Festschreibung bezieht, die wir wollen?
also sowas wie git pull -r 3ef0dedda699f56dc1062b5dcc2c59f7ad93ede4
git pull server:repo
gegen den regulärengit pull
) durchführeuploadpack.allowReachableSHA1InWant
Seit Git 2.5.0 kann diese Konfigurationsvariable auf dem Server aktiviert werden, hier die GitHub-Featureanforderung und das GitHub-Commit, das diese Funktion aktiviert .
Bitbucket Server hat es seit Version 5.5+ aktiviert .
Verwendungszweck:
quelle
Wenn ein Prozess auf Ihrem Live-Server sofort auf den soeben abgerufenen Inhalt zugreift (dh Sie können
git checkout 3ef0d
nach dem Abrufen nicht mehr damit arbeiten ), sollten Sie die Version markieren, die Sie in der Produktion bereitstellen möchten, und dieses Tag speziell in der Produktion auschecken, damit das Abrufen nicht sofort erfolgt ändere dein Arbeitsverzeichnis. Andernfalls riskierst du jemanden, der kurz vor dem Ziehen drückt.quelle
Beachten Sie, dass Sie
git pull git checkout my-old-commit
jetzt in einem DETACHED HEAD-Status verbleiben. Sie senden also zukünftige Commits in diesem Repository über einen neuen Commit-Pfad. Für ein Deployment-Repo ist dies kein großes Problem, da es sich bei den Commits nur um Commits handeln sollte, die vor dem Abrufen bereits korrekt festgeschrieben wurden.Manchmal ist es jedoch hilfreich zu überprüfen, ob die Commit-Marken (head, tags, remotes) mit dem Master-Repo identisch sind. Um dies zu beheben, gehen Sie wie folgt vor:
git reset
- Bringen Sie den Kopf wieder angit fetch
- Synchronisieren Sie die Markierungen für Fernbedienungen.quelle