Как клонировать старый 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 в каком-нибудь тестовом каталоге и посмотреть, что вам нравится.