2015-07-16 8 views
20

Ich möchte eine git pull tun, aber nur bis zu einem bestimmten Festschreiben.Git ziehen bis zu einem bestimmten Commit

A->B->C->D->E->F (Remote master HEAD) 

so meine local master HEAD Punkte zu B annehmen, und ich möchte bis E ziehen. Was soll ich machen ?

Dies zieht nicht ein bestimmtes Commit, das ist bis zu einem bestimmten Commit.

+0

mögliches Duplikat von [Ziehen Sie ein bestimmtes Commit von einem Remote-Git-Repository] (http://stackoverflow.com/questions/14872486/pull-a-specific-commit-from-a-remote-git-repository) –

+2

'git fetch' und' git merge E'. – poke

Antwort

25

git pull nichts anderes als git fetch von git merge gefolgt ist. Also, was Sie tun können, ist

git fetch remote example_branch

git merge <commit_hash>

+0

Was soll der "Refer this" sein? – developerbmw

+0

@Brett Vergessen, den Link zu posten .. entfernt es vollständig – unrealsoul007

+0

@ unrealsoul007 das wird genau das eine bestimmte commit richtig zusammenführen? Um also von B nach E zu ziehen, wäre der Befehl git merge richtig? –

1

Wenn Sie ein Commit in Ihre Verzweigung zusammenführen, sollten Sie den gesamten Verlauf dazwischen erhalten.

beachten:

 
$ git init ./ 
Initialized empty Git repository in /Users/dfarrell/git/demo/.git/ 
$ echo 'a' > letter 
$ git add letter 
$ git commit -m 'Initial Letter' 
[master (root-commit) 6e59e76] Initial Letter 
1 file changed, 1 insertion(+) 
create mode 100644 letter 
$ echo 'b' >> letter 
$ git add letter && git commit -m 'Adding letter' 
[master 7126e6d] Adding letter 
1 file changed, 1 insertion(+) 
$ echo 'c' >> letter; git add letter && git commit -m 'Adding letter' 
[master f2458be] Adding letter 
1 file changed, 1 insertion(+) 
$ echo 'd' >> letter; git add letter && git commit -m 'Adding letter' 
[master 7f77979] Adding letter 
1 file changed, 1 insertion(+) 
$ echo 'e' >> letter; git add letter && git commit -m 'Adding letter' 
[master 790eade] Adding letter 
1 file changed, 1 insertion(+) 
$ git log 
commit 790eade367b0d8ab8146596cd717c25fd895302a 
Author: Dan Farrell 
Date: Thu Jul 16 14:21:26 2015 -0500 

    Adding letter 

commit 7f77979efd17f277b4be695c559c1383d2fc2f27 
Author: Dan Farrell 
Date: Thu Jul 16 14:21:24 2015 -0500 

    Adding letter 

commit f2458bea7780bf09fe643095dbae95cf97357ccc 
Author: Dan Farrell 
Date: Thu Jul 16 14:21:19 2015 -0500 

    Adding letter 

commit 7126e6dcb9c28ac60cb86ae40fb358350d0c5fad 
Author: Dan Farrell 
Date: Thu Jul 16 14:20:52 2015 -0500 

    Adding letter 

commit 6e59e7650314112fb80097d7d3803c964b3656f0 
Author: Dan Farrell 
Date: Thu Jul 16 14:20:33 2015 -0500 

    Initial Letter 
$ git checkout 6e59e7650314112fb80097d7d3803c964b3656f 
$ git checkout 7126e6dcb9c28ac60cb86ae40fb358350d0c5fad 
Note: checking out '7126e6dcb9c28ac60cb86ae40fb358350d0c5fad'. 

You are in 'detached HEAD' state. You can look around, make experimental 
changes and commit them, and you can discard any commits you make in this 
state without impacting any branches by performing another checkout. 

If you want to create a new branch to retain commits you create, 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 7126e6d... Adding letter 
$ git checkout -b B 7126e6dcb9c28ac60cb86ae40fb358350d0c5fad 
Switched to a new branch 'B' 
$ git pull 790eade367b0d8ab8146596cd717c25fd895302a 
fatal: '790eade367b0d8ab8146596cd717c25fd895302a' does not appear to be a git repository 
fatal: Could not read from remote repository. 

Please make sure you have the correct access rights 
and the repository exists. 
$ git merge 7f77979efd17f277b4be695c559c1383d2fc2f27 
Updating 7126e6d..7f77979 
Fast-forward 
letter | 2 ++ 
1 file changed, 2 insertions(+) 
$ cat letter 
a 
b 
c 
d 
5

Zuerst holt die neuesten Commits aus der Remote-Repo. Dies hat keine Auswirkungen auf Ihre lokale Niederlassung.

git fetch origin 

dann die Remote-Tracking-Zweig Kasse und ein git log tun, um die Commits

git checkout origin/master 
git log 

greifen die Commit Hash-Wert des sehen, begehen Sie (oder nur die ersten ~ 5 Zeichen fusionieren wollen davon) und merge, die in Master begehen

git checkout master 
git merge <commit hash> 
+0

Ich habe Sie abgelehnt, weil dies nicht wie angekündigt funktioniert. Mit Ihrer Methode "git fetch ursprung" holt sie zunächst alle entfernten Zweige (dies sollte explizit erwähnt werden, besonders für Leute, die in Projekten mit vielen und großen Zweigen arbeiten). Zweitens, mit dieser Methode "git Merge " fusioniert Ihre lokale Geschichte nicht bis zum gewünschten Commit, wenn Sie wieder in der Geschichte sind. Beispiel: Sie sind lokal bei Commit 100, Sie wollen bis zu 150 bekommen, indem Sie alles abholen (mit Remote HEAD auf 100). Alles in allem, bitte posten Sie keine Sachen, wenn Sie nicht zu 110% wissen, was Sie tun. – Placeholder

+0

@Placeholder sollten Sie das Handbuch für 'git fetch' lesen, bevor Sie solchen Unsinn schreiben. Außerdem sollten Sie die ursprüngliche Frage und meine Antwort lesen. Wenn du meiner Antwort folgst, wirst du nicht "zurück in der Geschichte" sein, da ich den Benutzer explizit anweisen würde, "checkmaster" zu "git". Insgesamt, bitte posten Sie keine Sachen, wenn Sie nicht mindestens 50% klar sind, was Sie tun. – developerbmw

-1

Sie können auch die neuesten begehen ziehen und rückgängig machen nur, wenn die commit Sie wünschen:

git pull origin master 
git reset --hard HEAD~1 

Ersetzen Sie master mit Ihrem gewünschten Zweig.

Verwenden git log zu denen sehen, begehen Sie zurücksetzen möchten:

git log 

persönlich diese besser für mich gearbeitet hat.

Im Grunde genommen zieht dies den letzten Commit, und Sie setzen die Commits einzeln nacheinander zurück. Verwenden Sie git log, um den Commit-Verlauf zu sehen.

Gute Punkte: Funktioniert wie beworben. Sie müssen keinen Commit-Hash verwenden oder nicht benötigte Zweige ziehen.

Fehlerhafte Punkte: Sie müssen Commits um eins rückgängig machen.

WARNUNG: alle lokalen Änderungen Commit/bunkern, denn mit --hard Sie sie verlieren werden. Benutzung auf eigene Gefahr!

+0

Linus Torvalds würde wahrscheinlich weinen, wenn er wüsste, dass Leute git so benutzen – developerbmw

+0

@developerbmw: LOL, scheint wie jemand wirklich verletzt ist. Danke für zwei Dinge: Zweimal auf eine Frage zu flammen und dafür, mein Profil zu verfolgen und meine unzusammenhängenden Antworten herunterzustimmen. Lassen Sie Ihre persönlichen Probleme anderswo lösen. PS: Ich habe bemerkt, dass du meinem Profil folgst, weil ich dieses Profil offensichtlich nicht mehr verwende. Wie auch immer, habe Spaß mit deinem BWM. PS: Ich denke, dass beide Kommentare gelöscht werden sollten. Geh woanders hin. – Placeholder