Как клонировать старый git -коммит (и еще несколько вопросов о git)
У меня есть git -репозиторий моего проекта с примерно 20 коммитами. Я знаю, как клонировать фактическое commit с помощью git clone
,
- но как я могу "клонировать" старую фиксацию?
- Есть ли действительно хороший git -GUI (imho
qgit
не очень хороший графический интерфейс)?
- что такое "ветки"?
- когда я хочу выпустить 0.1, 0.2 и т.д., что лучший способ отметить эти коммиты в git?
- Каковы большие отличия от svn?
Ответы
Ответ 1
A git репозиторий содержит всю историю за все время.
Поэтому, когда вы клонируете репозиторий, вы клонируете его своей полной историей, а затем вы можете сделать ветку от любой фиксации, которую вы хотите:
$ git checkout -b aNewBranch SHA1
с SHA1, представляющим идентификатор фиксации, из которого вы хотите продолжить.
Ветви в git - это всего лишь способ отслеживать один путь DAG (Directed Acyclic Graph), который является набором коммитов, представляющих историю репозитория git.
Это простой указатель, который вы назначаете одному из этих коммитов, и он будет продолжать двигаться вместе с каждым новым коммитом.
![branches]()
Подробнее см. Pro Git для книги.
Вы можете отметить конкретную фиксацию с помощью тега, который, подобно ветке, является простым указателем, но неизменным (он не будет перемещаться, когда вы делаете новый коммит).
Вы будете использовать предпочтительно аннотированные теги, которые сохраняются как полные объекты в базе данных git. Они проверены; содержат имя тегатора, адрес электронной почты и дату; иметь сообщение с тегами; и могут быть подписаны и проверены с помощью GNU Privacy Guard (GPG).
Раздел "Графические интерфейсы" InterfacesFrontendsAndTools на странице git В вики перечислены различные графические интерфейсы для git на данный момент,
Вы увидите много вопросов о различии между git и SVN: см. мой ответ (или этот).
Мой самый полный ответ о фундаментальных различиях между git и SVN находится здесь:
", который из двух лучше: git или SVN" .
Ответ 2
В этом посте есть несколько вопросов, вот мои ответы на некоторые ответы:
Во-первых, чтобы "клонировать" предыдущую фиксацию, вы можете сделать что-то вроде этого:
git clone REPO_URL
git checkout HEAD~1 // checks out the last commit first parent
Используйте ~1
для доступа к последнему первичному первому родительскому элементу и увеличьте число, чтобы получить родительский родительский элемент и так далее. Подробнее о нотации тильды и каретки.
Две приведенные выше команды помещают вас в состояние автономного состояния HEAD, которое может быть или не быть важным на основе контекста. Например, не важно, клонируете ли вы как часть сценариев развертывания, и все, о чем вы заботитесь, - это доступ к предыдущей фиксации (скажем, как часть стратегии отката).
Если вам нужно начать работу с этого момента в истории, вы можете запустить
git checkout -b NEW_BRANCH_NAME
Хороший графический интерфейс git? Для меня SourceTree является лучшим.
Что такое ветки? По-моему, ветка - это очень простой способ поворота. Скажите, что вы работаете над одной ветвью, master
, и вы хотите попробовать эксперимент. Просто, просто git checkout -b experiment
, и вы быстро в безопасном месте, чтобы сломать вещи.
Чем отличается git и svn?
git является распространять систему контроля версий. svn нет. Кроме того, разветвление (упомянутое выше) проще в git.
Для тегов я не знаю, существует ли "Один True Way" (есть ли когда-нибудь?), но просто исследуйте команду git tag
. Одна вещь в git заключается в том, насколько легко клонировать дубликат вашего репо на вашем локальном компьютере (или где угодно) и делать все, что вы хотите, и посмотреть, что произойдет. Если вы что-то испортили, просто удалите каталог. Итак, вы можете поэкспериментировать с git tag
в каком-нибудь тестовом каталоге и посмотреть, что вам нравится.