Хотите изменить моего хозяина на более старую фиксацию, как я могу это сделать?
Я хочу вернуться к предыдущей фиксации, а затем опубликовать этот код, а затем вернуться к последней фиксации.
то есть. поэтому мой мастер указывает на более раннюю версию фиксации, чтобы я мог испугать эту версию, а затем я хочу вернуться к последней фиксации, из которой я был изначально.
Как я могу это сделать?
Ответы
Ответ 1
Если вы хотите сделать это и верните мастер к предыдущему фиксации:
git checkout master~1 # Checkout previous commit on master
git checkout -b new_master # Create branch for new master
git branch -D master # Delete old master
git branch -mv new_master master # Make new_master master
В качестве альтернативы:
git reset --hard master~1 # Reset current branch to one commit ago on master
Ответ 2
Твой вопрос непонятен. Я думаю, что вы просите:
git push -f origin $old_commit_id:master
Что это будет? Он нажимает $old_commit_id
commit на origin
как новый заголовок ветки origin
s master
.
Если это то, что вы хотели, вам не нужно касаться локальной ветки master
вообще.
Ответ 3
использовать git reset --hard <old commit number>
он будет reset HEAD для этого старого фиксации.
Кроме того, вам нужно использовать git push -f origin
для изменения удаленного репо.
Ответ 4
Вы можете просто git checkout <commit-id>
выполнить все, что вам нужно, затем git checkout master
, чтобы вернуться к новому коду.
Если вам действительно нужно изменить старый код, чтобы отпустить его, вы должны, вероятно,:
git checkout -b my_release <commit-id>
... prepare code for release ...
... release code ...
git checkout master
git merge my_release
Кроме того, я не могу рекомендовать git flow достаточно. Это делает все это довольно просто.
Ответ 5
Предполагая граф фиксации следующим образом:
| (A) ---------> (B) ----------> (C)
| ^
| (master)
Вы хотите сначала проверить master
и создать ветвь, которая указывает, где находится master
:
git checkout master
git branch pointer master
Теперь должно выглядеть так:
| (A) ---------> (B) ----------> (C)
| ^
| (HEAD, master, pointer)
Теперь, когда вы уже находитесь на master
, мы сообщим ветке master
для перемещения назад один коммит:
git reset master~1
Теперь master
следует переместить назад на один пробел, но ветвь pointer
все еще находится в последней фиксации:
| (A) ---------> (B) ----------> (C)
| ^ ^
| (HEAD, master) (pointer)
На этом этапе вы можете нажать master
на удаленный или где бы то ни было, а затем быстро переместить его обратно в ветвь pointer
. Вы можете убить ветвь pointer
в этой точке:
git push origin master
git merge --ff-only pointer
git branch -D pointer
Финал:
| (A) ---------> (B) ----------> (C)
| ^ ^
| [ origin/master ] (HEAD, master)
Ответ 6
Чтобы перейти к предыдущей версии:
git checkout <version hash>
выполните свою работу здесь и скопируйте ее с помощью
git commit --amend
Чтобы вернуться к мастеру:
git checkout master
Ответ 7
Если вы хотите избежать принудительного нажатия, вот как вернуть репо в более старую фиксацию и сохранить всю промежуточную работу:
git checkout 307a5cd # check out the commit that you want to reset to
git checkout -b fixy # create a branch named fixy to do the work
git merge -s ours master # merge master history without changing any files
git checkout master # switch back to master
git merge fixy # and merge in the fixed branch
git push # done, no need to force push!
Готово! Замените 307a5cd любым коммитом, который вы хотите в своем репо.
(Я знаю, что первые две строки можно объединить, но я думаю, что это делает менее понятным, что происходит)
Вот это графически:
c1 -- c2 -- c3 -- c4 -- c2' -- c5 ...
\ /
'------------'
Вы эффективно удаляете c3 и c4 и возвращаете свой проект обратно в c2. Тем не менее, c3 и c4 по-прежнему доступны в истории вашего проекта, если вы когда-нибудь захотите увидеть их снова.