538 Stimmen

Wie klone ich das Git-Repository mit einer bestimmten Revision/einem bestimmten Changeset?

Wie kann ich das Git-Repository mit einer bestimmten Revision klonen, so wie ich es normalerweise in Mercurial mache:

hg clone -r 3 /path/to/repository

980voto

Vaibhav Bajpai Punkte 15690
$ git clone $URL
$ cd $PROJECT_NAME
$ git reset --hard $SHA1

Um wieder zur letzten Übertragung zurückzukehren

$ git pull

Um die rückgängig gemachte Übergabe online (remote) zu speichern, müssen Sie den erzwingenden Ursprung pushen:

git push origin -f

325voto

CB Bailey Punkte 693084

UPDATE 2 Seit Git 2.5.0 die unten beschriebene Funktion kann auf dem Server mit der Konfigurationsvariable aktiviert werden uploadpack.allowReachableSHA1InWant , hier die GitHub Funktionsanfrage und die GitHub Commit zur Aktivierung dieser Funktion . Beachten Sie, dass einige Git-Server diese Option standardmäßig aktivieren, z. B. Bitbucket Server aktiviert sie seit Version 5.5+ . Siehe dies Antwort auf Stackexchange für ein Beispiel, wie Sie die Konfigurationsoption aktivieren.

UPDATE 1 Für Git-Versionen 1.7 < v < 2.5 git clone und git reset verwenden, wie in Antwort von Vaibhav Bajpai

Wenn Sie nicht das gesamte Repository abrufen wollen, sollten Sie wahrscheinlich nicht clone . Sie können immer einfach fetch verwenden, um den Zweig auszuwählen, den Sie holen wollen. Ich bin kein hg-Experte, also kenne ich die Details von -r aber in Git kann man so etwas machen.

# make a new blank repository in the current directory
git init

# add a remote
git remote add origin url://to/source/repository

# fetch a commit (or branch or tag) of interest
# Note: the full history up to this commit will be retrieved unless 
#       you limit it with '--depth=...' or '--shallow-since=...'
git fetch origin <sha1-of-commit-of-interest>

# reset this repository's master branch to the commit of interest
git reset --hard FETCH_HEAD

153voto

Peter Kovac Punkte 1849

Zum Klonen nur eine einzige spezifische Verpflichtung für einen bestimmten Zweig oder die Verwendung eines Tags:

git clone --depth=1 --branch NAME https://github.com/your/repo.git

Leider, NAME kann nur ein Zweig- oder Tag-Name sein (nicht ein Commit SHA).

Weglassen der --depth um die gesamte Historie herunterzuladen und dann diesen Zweig oder dieses Tag auszuchecken:

git clone --branch NAME https://github.com/your/repo.git

Dies funktioniert mit der aktuellen Version von git (ich habe es mit der Version 2.18.0 ).

59voto

Beim Klonen eines Git-Repositorys wird das gesamte Repository geklont: Es gibt keine Möglichkeit, nur eine Revision zum Klonen auszuwählen. Sobald Sie jedoch das git clone können Sie eine bestimmte Revision auschecken, indem Sie checkout <rev> .

43voto

M.Othman Punkte 4882

Sie können einfach verwenden git checkout <commit hash>

in dieser Reihenfolge

bash git clone [URLTORepository] git checkout [commithash]

Der Commit-Hash sieht so aus: "45ef55ac20ce2389c9180658fdba35f4a663d204"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X