Может ли кто-нибудь сказать мне, как клонировать первую фиксацию? Я не хочу удалять последние коммиты, просто сделайте копию клонов исходного состояния, чтобы я мог захватить некоторые файлы.
Git: как клонировать первый коммит?
Ответ 1
Чтобы ответить на вопрос, который, я думаю, вы хотели спросить:
Вы можете получить весь свой репозиторий в состояние первого коммита с помощью:
git checkout <commit SHA1>
После того, как вы закончите работу, вы можете сделать git checkout master
, чтобы вернуться туда, где вы были.
И вы можете получить отдельные файлы в их состояние с первого коммита с помощью:
git checkout <commit SHA1> <file or directory> ...
Снова, после того, как вы закончите, вы можете сделать git checkout master <file or directory>
, чтобы вернуться туда, где вы были.
Нет необходимости "клонировать" фиксацию (по которой я предполагаю, что вы имеете в виду клонирование репозитория и проверку первой фиксации?). Конечно, если по какой-то причине вы не смогли бы изменить какие-либо файлы в вашем репозитории (например, не хотите, чтобы ваш сборник устарел), вы могли бы, конечно, клонировать его, а затем сделать то же самое в клонированном репо.
Ответ 2
Я думаю, что хочу сделать то же самое. Проверьте первоначальную фиксацию и оттуда оттуда. Я не уверен, что ответ принят. Но, я думаю, это могло (частично) заполнить исходный вопрос. После прочтения этой темы я, однако, поеду с помощью bash скриптов вокруг
git log --pretty=oneline master | tail -1
Я думаю, я надеялся, что для этого будет какая-то фиксация или древовидная ссылка.
Поэтому вы можете проверить первый коммит с помощью следующей команды:
git checkout `git log --pretty=oneline | tail -1 | sed 's/ .*$//'`
Обновление 2017: с '12 (GIT 1.8.1) у нас есть лучший вариант: git rev-list, См. Другие ответы здесь или KyleMit у суперпользователя для лучшего способа написания этого сценария.
Ответ 3
Если с помощью "first commit" вы подразумеваете родительское коммитирование ветки, у которой нет самих родителей, вы хотите использовать git -rev-list для этого. Просто используйте
git rev-list --max-parents=0 HEAD
Это получит ваш "Исходный коммит" для текущей HEAD. Используйте мастер, если вы перечислите, или любую другую спецификацию редакции ребенка. оберните это в $(...)
, чтобы использовать это в выражении, например:
git checkout $(git rev-list --max-parents=0 HEAD)
Ответ 4
Я думаю, все, что вам нужно сделать, это создать новую ветку из первоначальной фиксации, которую вы хотите, проверить это, а затем объединиться обратно в HEAD ветки, на которой вы работаете.
Если abcxyz... является SHA1 комманды, которую вы хотите, и вы работаете в главной ветки, обычно это то, что вы хотели бы сделать:
git branch oldskool abcxyz... # creates a new branch called oldskool from the commit
git checkout oldskool
#make changes
git rebase master #bring the oldskool branch up to the HEAD of the master branch (shouldn't overwrite the changes in the files you edited)
git checkout master
git merge oldskool