wake-up-neo.com

Git klonen eine bestimmte Version des Remote-Repositorys

Ich habe vor etwa einem Monat ein Remote-Git-Repository geklont. Das Remote-Repository hat viele Änderungen erfahren und ist jetzt instabil geworden. Jetzt brauche ich eine weitere Kopie des Repositorys, eine identische Version, die ich vor einem Monat geklont habe.

Wie mache ich das?

149
nandu

Sie könnten Ihr Repository auf jeden beliebigen Commit "zurücksetzen" (z. B. vor einem Monat). 

Verwenden Sie git-reset dafür:

git clone [remote_address_here] my_repo
cd my_repo
git reset --hard [ENTER HERE THE COMMIT HASH YOU WANT]
199
Rui Carneiro

Sie können einfach verwenden 

git checkout  commithash

in dieser Reihenfolge

git init    
git clone `URLTORepository`
cd `into your cloned folder`
git checkout commithash

Übergeben Sie Hash sieht so aus "45ef55ac20ce2389c9180658fdba35f4a663d204"

66
M.Othman

Verwenden Sie _git log_, um die Revision zu finden, auf die Sie ein Rollback durchführen möchten, und notieren Sie sich den Commit-Hash. Danach haben Sie 2 Möglichkeiten:

  1. Wenn Sie nach dieser Überarbeitung etwas festschreiben möchten, empfehle ich , in einen neuen Zweig zu wechseln: git checkout -b <new_branch_name> <hash>

  2. Wenn Sie nach dieser Überarbeitung nichts mehr festschreiben möchten, können Sie einfach ohne Verzweigung auschecken: git checkout <hash> - HINWEIS: Dies wird gesetzt Ihr Repository befindet sich in einem "getrennten HEAD" -Zustand, was bedeutet, dass es derzeit keiner Verzweigung zugeordnet ist - dann Sie müssen einige zusätzliche Arbeiten ausführen, um neue Commits zu einer tatsächlichen Verzweigung zusammenzuführen .

Beispiel:

_$ git log
commit 89915b4cc0810a9c9e67b3706a2850c58120cf75
Author: Jardel Weyrich <suppressed>
Date:   Wed Aug 18 20:15:01 2010 -0300

    Added a custom extension.

commit 4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7
Author: Jardel Weyrich <suppressed>
Date:   Wed Aug 18 20:13:48 2010 -0300

    Missing constness.

$ git checkout 4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7
Note: moving to '4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7'
which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
  git checkout -b <new_branch_name>
HEAD is now at 4553c14... Missing constness.
_

Auf diese Weise verlieren Sie keine Informationen und können zu einer neueren Version wechseln, wenn diese stabil ist.

33
jweyrich

Wenn diese Version, die Sie benötigen, entweder ein Zweig oder ein Tag ist, dann gilt Folgendes:

git clone -b branch_or_tag_name repo_address_or_path
4
unclechu

Im Gegensatz zu zentralisierten Versionskontrollsystemen kopiert Git das gesamte Repository, sodass Sie nicht nur die aktuellen Remote-Dateien, sondern den gesamten Verlauf abrufen. Ihr lokales Repository wird all dies enthalten.

Möglicherweise gab es tags , um eine bestimmte Version zu markieren. Wenn nicht, können Sie sie lokal erstellen. Ein guter Weg, dies zu tun, ist die Verwendung von git log oder vielleicht visueller mit Werkzeugen wie gitk (vielleicht gitk --all, um alle Verzweigungen und Tags anzuzeigen). Wenn Sie die Commits-Hashes erkennen können, die zu diesem Zeitpunkt verwendet wurden, können Sie sie mit git tag <hash> kennzeichnen und diese dann in neuen Arbeitskopien auschecken (zum Beispiel git checkout -b new_branch_name tag_name oder direkt mit dem Hash anstelle des Tag-Namens).

2
Bruno

Sie können es so lösen:

git reset --hard sha

wobei sha z.B .: 85a108ec5d8443626c690a84bc7901195d19c446

Sie können den gewünschten sha mit dem Befehl erhalten: 

git log
1

Wahrscheinlich löst git reset Ihr Problem.

git reset --hard -#commit hash-
0
user4783046

Der Quellbaum, den Sie benötigen, ist immer noch im Git-Repository verfügbar. Sie benötigen jedoch die SHA1 des Commits, an dem Sie interessiert sind.

Wenn Sie das SHA1 erhalten können, können Sie dort einen Zweig/Reset erstellen, um das identische Repository zu erhalten.

Befehle laut Ruis Antwort

0
gpampara

uploadpack.allowReachableSHA1InWant

Da Git 2.5.0 diese Konfigurationsvariable auf dem Server aktiviert werden kann, wird hier das GitHub-Feature request und das GitHub-Commit aktiviert, um dieses Feature zu aktivieren .

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"