Frage git zieht eine bestimmte Revision aus dem Remote-Repository


Wir haben ein Remote-Git-Repository, das wir normalerweise bereitstellen git push auf unserem Dev-Server dann git pull auf unseren Live-Servern, um die neueste Push-Version des Repos zu erhalten.

Aber wenn wir ein paar Überarbeitungen vorgenommen und gepusht haben (ohne a git pull auf den Live - Servern) wie können wir tun git pull bezieht sich das auf das ältere Commit, das wir wollen?

etwas ähnliches git pull -r 3ef0dedda699f56dc1062b5dcc2c59f7ad93ede4


38
2018-02-26 18:26


Ursprung




Antworten:


Sobald Sie das Repository gezogen haben, sollten Sie in der Lage sein zu gehen:

git checkout 3ef0d...

42
2018-02-26 18:31



Schön, das hat perfekt funktioniert. Mir ist auch aufgefallen, dass ich den entfernten Server angeben muss, wenn ich den nächsten Pull (d. H. git pull server:repo gegen den regulären git pull) - dlrust


uploadpack.allowReachableSHA1InWant

Schon seit Git 2.5.0 Diese Konfigurationsvariable kann auf dem Server aktiviert werden, hier der GitHub-Feature-Anfrage und das GitHub-Commit aktiviert diese Funktion.

Bitbucket Server hat es seit Version 5.5+ aktiviert.

Verwendungszweck:

# Make remote with 4 commits, and local with just one.
mkdir server
cd server
git init
touch 1
git add 1
git commit -m 1
git clone ./ ../local
for i in {2..4}; do
    touch "$i"
    git add "$i"
    git commit -m "$i"
done

# Before last commit.
SHA3="$(git log --format='%H' --skip=1 -n1)"
# Last commit.
SHA4="$(git log --format='%H' -n1)"

# Failing control without feature.
cd ../local
# Does not give an error, but does not fetch either.
git fetch origin "$SHA3"
# Error.
git checkout "$SHA3"

# Enable the feature.
cd ../server
git config uploadpack.allowReachableSHA1InWant true

# Now it works.
cd ../local
git fetch origin "$SHA3"
git checkout "$SHA3"
# Error.
git checkout "$SHA4"

6
2017-08-10 11:23





Wenn ein Prozess auf Ihrem Live-Server sofort auf den gerade gezogenen Inhalt zugreift (mit dem Sie nicht arbeiten können) git checkout 3ef0d Nach dem Ziehen sollten Sie die Version, die Sie in der Produktion bereitstellen möchten, markieren und dieses Tag speziell für die Produktion auschecken, damit das Ziehen nicht sofort Ihr Arbeitsverzeichnis ändert. Sonst riskierst du jemanden, der kurz vor deinem Zug drängt.


2
2018-02-26 18:35





Beachten Sie, dass a git pull git checkout my-old-commit jetzt verlassen Sie in einem DETACHED HEAD-Zustand - effektiv senden Sie zukünftige Commits in diesem Repository auf einen neuen Commit-Pfad. Für ein Deployment-Repo ist dies kein großes Problem, da die einzigen Commits diejenigen sein sollten, die bereits korrekt übergeben wurden, bevor sie gezogen werden.

Es ist jedoch manchmal nützlich zu prüfen, ob die Commit-Marker (Kopf, Tags, Fernbedienungen) identisch mit dem Master-Repo sind. Um das nach dem Checkout zu beheben: git reset   - bringt den Kopf wieder an git fetch  - Synchronisiert die Marker für Fernbedienungen [dies kann von der Git-Version abhängig sein - zugegebenermaßen befindet sich unsere Umgebung immer noch auf 1.7 ... könnte also nicht mehr benötigt werden YMMV]


1
2017-11-13 11:20