как клонировать старый git-commit (и еще несколько вопросов о git) - PullRequest
72 голосов
/ 31 октября 2009

У меня есть git-репозиторий моего проекта с 20 коммитами. Я знаю, как клонировать фактический коммит с git clone,

  • но как я могу "клонировать" старый коммит?
  • есть ли действительно хороший git-GUI (imho qgit не очень хороший GUI)?
  • что такое "ветви"?
  • когда я хочу выпустить 0.1, 0.2 и так далее, как лучше всего пометить эти коммиты в git?
  • Какие большие отличия от SVN?

Ответы [ 2 ]

122 голосов
/ 01 ноября 2009

Git-репозиторий содержит всю историю за все время.
Поэтому, когда вы клонируете репозиторий, вы клонируете его с полной историей, и , затем , вы можете сделать ветку из любого коммита, который вы хотите:

 $ git checkout -b aNewBranch SHA1

с SHA1, представляющим идентификатор фиксации, с которого вы хотите продолжить.


Ветви в Git - это просто способ отслеживания одного пути DAG (направленного ациклического графа) * ​​1011 *, который представляет собой набор коммитов, представляющих историю репозитория Git.
Это просто указатель, который вы назначаете одному из этих коммитов, и он будет продолжать двигаться вместе с каждым новым коммитом.

branches

Подробнее см. Pro Git book.


Вы можете пометить конкретный коммит тегом , который, как и ветка, является простым указателем, но неизменным (он не будет перемещаться при создании нового коммита).
Желательно использовать аннотированные теги, которые хранятся как полные объекты в базе данных Git. Они контрольные суммы; содержать имя тега, адрес электронной почты и дату; иметь сообщение с тегами; и может быть подписано и проверено с помощью GNU Privacy Guard (GPG).


В разделе "Графические интерфейсы" на странице InterfacesFrontendsAndTools на Git Wiki перечислены различные графические интерфейсы для Git на данный момент.


Вы увидите много вопросов о разнице между Git и SVN: см. мой ответ (или этот ), например.
Мой самый полный ответ о фундаментальных различиях между Git и SVN находится здесь:
"какой из двух лучше: git или SVN" .

4 голосов
/ 26 февраля 2016

В этом посте есть несколько вопросов, вот некоторые ответы на мои вопросы:

Сначала, чтобы «клонировать» предыдущий коммит, вы можете сделать что-то вроде этого:

git clone REPO_URL
git checkout HEAD~1 // checks out the last commit's first parent

Используйте ~1, чтобы получить доступ к первому родителю последнего коммита, и увеличьте число, чтобы получить родителя родителя, и так далее. Подробнее об обозначениях тильды и карета .

Две вышеупомянутые команды приведут вас в состояние HEAD, которое может быть или не быть важным в зависимости от контекста. Например, это не важно, если вы клонируете как часть своих сценариев развертывания, и все, что вас волнует, - это доступ к предыдущему коммиту (скажем, как часть стратегии отката).

Если вам нужно начать работу с этого момента истории, вы можете запустить

git checkout -b NEW_BRANCH_NAME

Хороший графический интерфейс Git? Для меня SourceTree самый лучший.

Что такое ветви? По моим собственным словам, ветвь - это очень простой способ разворота. Скажем, вы работаете над одной веткой, master и хотите попробовать эксперимент. Легко, просто git checkout -b experiment, и вы быстро в безопасном месте, чтобы разбить вещи.

Чем отличаются git от svn?

git - это распространяемая система управления версиями . свн нет. Кроме того, ветвление (упомянутое выше) легче в git.

Для тегирования я не знаю, существует ли «Единый верный путь» (есть ли когда-нибудь?), Но просто изучите команду git tag. Одна из замечательных особенностей git - это то, как легко клонировать копию вашего репо на локальном компьютере (или где-либо еще), делать с ним все, что вы хотите, и посмотреть, что произойдет. Если вы что-то напутали, просто удалите каталог. Итак, вы можете поэкспериментировать с git tag в некотором каталоге тестирования и посмотреть, что вам нравится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...