Git: как двигаться вперед и назад между коммитами



у меня есть вопрос новичка о Git:



мне нужно двигаться вперед и назад в истории ветви.
Это означает, что мне нужно вернуть все файлы в состояние, в котором они были в какой-то старой редакции, а затем мне нужно вернуться к последнему состоянию в репозитории. Мне не нужно брать на себя обязательства.



С SVN, это было бы



svn up -r800


чтобы добраться до ревизии 800, и



svn up


для синхронизации с репозиторием.



Я знаю, что хэш commit я хочу вернуться, поэтому я попытался



git reset <hash>


который, кажется, чтобы получить меня там. Но потом я попробовал



git pull


но это жалуется на конфликты.



Итак, как правильно двигаться по истории отрасли?



Я думаю с точки зрения СВН, так что не сможете указать мне на некоторые хорошие учебник. Обратите внимание, что я уже проверил http://git.or.cz/course/svn.html и http://www.youtube.com/watch?v=8dhZ9BXQgc4 .



Спасибо, Ондра.

3623   5  

5 ответов:

Ну, я тоже бывший пользователь svn, и теперь использую git для всех моих проектов.

при использовании git, вы должны изменить способ мышления от архитектуры клиент-сервер, который используется в svn. В svn каждое изменение требует подключения к серверу. Используя git, ваше РЕПО находится в рабочем каталоге. Вам не нужно подключение для каждого действия РЕПО.

использовать только git push и git pull для синхронизации с РЕПО. Подумайте об этом, как с помощью rsync или любого резервного решения, чтобы сделайте два места имеют точно такое же содержание. Так же, как вы подключаете внешний резервный жесткий диск, а затем сделать содержимое в нем же с содержимым в вашем основном. Это использование git pull и git push.

если вы просто хотите вернуться назад и вперед по истории, сделайте это с помощью git checkout. См. идентификатор ревизии с помощью git history. Если вы используете Linux, используйте gitk чтобы увидеть дерево пересмотра. В Windows tortoise git может отображать его с помощью графика ревизий.

чтобы вернуться к последней версии редакция, используйте git checkout master. Перед выполнением любой команды, всегда заставляйте себя делать git status. Эта команда отобразит все, что вам нужно знать о текущем состоянии РЕПО, и какие действия вам нужно сделать, чтобы сделать это правильно. Прежде чем сделать git pull и git push, лучше убедиться, что git status результат содержит текст working directory clean.

если вам нужно вернуть файл в предыдущую версию, вы можете сделать это с помощью git merge. Прежде чем делать это с файлом, сначала проверьте его с помощью git diff. Бывший: git diff rev1:rev2 filename. Он будет печатать любые разные между двумя ревизиями. Изменение в rev1 будет заменено изменениями в rev2. Таким образом, чтобы сделать revert, rev2 будет старше rev1. После того, как вы удовлетворитесь результатом diff, сделайте это с git merge, просто заменить diff С merge, все остальные параметры остаются теми же.

Я надеюсь, что это поможет вам. Главный ключ-увидеть, что ваш рабочий каталог-это ваше РЕПО. Понимание этого поможет вам использовать git в полной мере. Удача.

можно использовать git checkout чтобы проверить любую фиксацию, а затем использовать ее с именем ветви, чтобы вернуться к именованной ветви.

git checkout с идентификатором фиксации, а не именем ветви, вы перемещаетесь с любой именованной ветви и переходите к тому, что известно как отрезанная голова.

Если вы используете git reset затем он переместит вашу ветвь обратно в старое состояние, осиротев более поздние коммиты, которые, вероятно, не то, что вы хотите.

другие ответы информативны, но я считаю, что это ближе всего к тому, что хочет ОП:

добавьте эти две функции в свой~/.bashrc следующее:

# checkout prev (older) revision
git_prev() {
    git checkout HEAD~
}

# checkout next (newer) commit
git_next() {
    BRANCH=`git show-ref | grep $(git show-ref -s -- HEAD) | sed 's|.*/\(.*\)||' | grep -v HEAD | sort | uniq`
    HASH=`git rev-parse $BRANCH`
    PREV=`git rev-list --topo-order HEAD..$HASH | tail -1`
    git checkout $PREV
}

использование:

$ git_prev
Previous HEAD position was 7042c8a... Commit message2
HEAD is now at d753ecc... Commit message1

$ git_next
Previous HEAD position was d753ecc... Commit message1
HEAD is now at 7042c8a... Commit message2

Примечание: эти команды всегда введите отрезанная голова государство. Если вы git_prev затем git_next из текущей проверенной ветви вы вернетесь в последнюю версию, но вы будете в состоянии отсоединенной головы. Делай git checkout BRANCH_NAME вернуться к нормальный.

чтобы проверить другую версию файла, используйте

git checkout rev -- filename

здесь rev может быть идентификатором фиксации, именем ветви, именем тега или относительной версией.

использовать git log,gitk чтобы посмотреть проверьте версии, чтобы увидеть, какую версию файла вы хотите.

чтобы сделать эту версию файла постоянной, вам нужно зафиксировать файл:git add filename; git commit filename

Я бы не рекомендовал git pull для изучения версий, потому что он делает слияние -- потенциальное изменение текущего состояния.

вам не нужно использовать git reset в этом случае, если вы не git add файл, который вы решили не совершать.

попробовать git reflog, Это список коммитов и возвратов, которые вы сделали для переключения между коммитами, даже коммиты, которые вы потеряли при проверке на предыдущую фиксацию.

Тогда вы можете попробовать git checkout <hash of a commit> чтобы переключиться на эту фиксацию.

надеюсь, что это помогает!

Comments

    Ничего не найдено.