2015-07-16 5 views
20

Я хочу сделать git pull, но только до определенной фиксации.Git тянуть до определенного фиксации

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

так полагаю, мои local master ГОЛОВЫ указывает на B, и я хочу, чтобы тянуть до E. Что мне делать ?

Это не тянет определенное коммитирование, это тянет до определенной фиксации.

+0

Возможный дубликат [Вытащить конкретную фиксацию из удаленного репозитория git] (http://stackoverflow.com/questions/14872486/pull-a-specific-commit-from-a-remote-git-repository) –

+2

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

ответ

25

git pull не что иное, как git fetch следуют git merge. Так что вы можете сделать, это

git fetch remote example_branch

git merge <commit_hash>

+0

Что такое «Refer to this»? – developerbmw

+0

@Brett Забыл опубликовать ссылку .. удалил ее полностью – unrealsoul007

+0

@ unrealsoul007 это объединит только одно конкретное право на совершение? Итак, чтобы тянуть от B до E, команда будет git merge правильно? –

1

Если вы объедините фиксацию в свою ветку, вы должны получить всю историю между ними.

Наблюдайте:

 
$ 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

Во-первых, получать последние коммиты из удаленного репозитория. Это не повлияет на ваш локальный филиал.

git fetch origin 

Затем проверка сук удаленного отслеживания и сделать журнал GIT увидеть коммиты

git checkout origin/master 
git log 

Grab фиксации хеш коммита вы хотите объединить до (или только первые ~ 5 символов из него) и слияния, которые совершают в мастера

git checkout master 
git merge <commit hash> 
+0

Я пропустил вас, потому что это не работает, как рекламируется. Прежде всего, с помощью вашего метода «git fetch origin» он извлекает все удаленные ветви (это должно быть указано явно, особенно для людей, работающих в проектах со многими и большими ветвями). Во-вторых, с помощью этого метода «git merge » не объединяет вашу локальную историю до желаемого фиксации, если вы снова в истории. Пример. Вы локально выполняете фиксацию 100, вы хотите получить до 150, извлекая все (с удаленным HEAD, равным 100). В целом, пожалуйста, не публикуйте материалы, если вы не на 110% не понимаете, что делаете. – Placeholder

+0

@Placeholder вы должны прочитать руководство для 'git fetch', прежде чем писать такую ​​бессмыслицу. Кроме того, вы должны прочитать исходный вопрос и мой ответ. Если вы последуете моему ответу, тогда вы не будете «вернуться в историю», так как я прямо инструктирую пользователя «git checkout master». В целом, пожалуйста, не публикуйте материалы, если вы не на 50% не поняли, что вы делаете. – developerbmw

-1

вы также можете вытащить последний коммит и просто отменить, пока не совершат вы хотите:

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

Заменить master с вашей желаемой веткой.

Журнал регистрации мерзавец, чтобы увидеть, к которому совершают вы хотели бы вернуться:

git log 

Лично, это работает для меня лучше.

В основном, что это делает, вытягивает последнюю фиксацию, и вы вручную возвращаете фиксации один за другим. Используйте журнал git, чтобы просмотреть историю фиксации.

Хорошие баллы: Работает как рекламируется. Вам не нужно использовать хеш фиксации или тянуть ненужные ветки.

Плохое количество баллов: Вам необходимо вернуться на одно.

ПРЕДУПРЕЖДЕНИЕ: Commit/спрятать все свои локальные изменения, потому что с --hard вы собираетесь потерять их. Используйте на свой страх и риск!

+0

Линус Торвальдс, вероятно, заплакал бы, если бы знал, что люди используют git вот так: – developerbmw

+0

@developerbmw: LOL, похоже, что кому-то действительно больно. Спасибо вам за две вещи: за то, что я дважды пылал меня по одному вопросу и за то, что преследовал мой профиль и отдавал голоса моим несвязанным ответам. Получите ваши личные проблемы в другом месте. P.S: Я заметил, что вы следите за моим профилем, потому что, очевидно, я больше не использую этот профиль. В любом случае, с удовольствием с вашим BWM. P.S: Я думаю, что оба эти комментария должны быть удалены. Иди плачь куда-нибудь еще. – Placeholder

Смежные вопросы