Прежде чем я начал использовать Git в качестве SCM, я бы «тщательно» протестировал код на стабильность, а затем просто скопировал рабочий каталог и переименовал его во что-то вроде (date) имя_проекта. Затем, если я где-то напортачил и не мог откопать себя, я бы просто начал с последнего стабильного каталога. Потом я услышал о Git.
Я хочу знать, правильно ли я использую Git. Вот что я делал:
напишите код ...
git add.
, чтобы добавить все измененные файлы в этап
git status
, чтобы проверить, готовы ли эти измененные файлы к фиксации
git commit
, чтобы зафиксировать последние изменения и написать сообщение фиксации
repeat
Пока это все, что я делал. Достаточно ли этого знания Git для простых целей резервного копирования и для возможности вернуться к «предыдущей стабильности»? Если нет, что еще мне следует знать?
Если все, что вы хотите сделать, это иметь возможность выполнить сброс до старого коммита, когда что-то пойдет не так, тогда да, вот и все. Хотя вы можете объединить все шаги git в один с помощью:
git commit -a
(который фиксирует все измененные отслеживаемые файлы)
, я бы посмотрел на ветвление и тегирование, если у вас есть время, но они не являются строго обязательными для того, что вы они просто делают жизнь проще
Да, вы все делаете правильно :) Перед коммитом иногда полезно запустить следующую команду:
git difftool
Это позволит вам выполнить все изменения кода в вашем любимый инструмент сравнения (например, Beyond Compare, KDiff3 и т. д.). Просто нажмите ввод, чтобы открыть инструмент, убедитесь, что все в порядке, и закройте программу. Затем снова нажмите Enter, чтобы автоматически отличить следующий измененный файл.
Если вы используете Windows, вот хороший учебник о том, как настроить ваш любимый инструмент сравнения (и слияния).
Как уже упоминалось, я настоятельно рекомендую освоиться с ветками. Мой рабочий процесс обычно таков:
Запуск из ветки master*:
git checkout -b awesome-new-killer-feature
создать новую ветку (-b) и проверить ее.
напишите код...
git add .
, git status
, git commit
внесите небольшие изменения, повторите шаг 2
О нет! Мой друг только что сообщил о серьезной ошибке! Он потерял данные!!!!!
git checkout master
вернуться к основной ветке
git checkout -b bugfix-serious-data-loss
создать новую ветку для исправления
исправить ошибки, git добавить
, git status
, git commit
, промойте, повторяйте, пока ошибка не будет исправлена
git checkout master
вернитесь к основной ветке
git merge --no- ff bugfix-serious-data-loss
объединить исправление ошибки обратно в master
Хорошо, теперь я могу вернуться к работе над моей удивительной-новой-убийцей-функцией:
git checkout awesome-new-killer- feature
возобновить работу над тем, над чем я работал
git rebase master
объединить обратные изменения в master с рабочим кодом, чтобы мы могли воспользоваться исправлением ошибки.Не говоря уже о том, что это снижает вероятность конфликтов слияния позже, когда нам нужно объединить эту ветку обратно в мастер
написать код, git add
, git status
, git commit
, промойте, повторите, пока функция не будет завершена
git checkout master
, git merge --no-ff awesome-new-killer-feature
объедините ветку обратно в master
Теперь расслабьтесь и наберите gitk
, чтобы увидеть хороший исторический обзор того, что вы делали.
Необязательно:
git branch -D bugfix-serious-data-loss awesome-new-killer-feature
удалите неиспользуемые ветки. Мне нравится содержать репозиторий в чистотеСила git не в том, что он может проверять вашу работу. Это происходит из-за того, насколько быстрыми и дешевыми являются ветвление и слияние. Ветвление позволяет вам работать над несколькими идеями одновременно и/или экспериментировать с одноразовыми идеями, не влияя на ваш стабильный код. Если идея не работает, просто удалите ветку, если она работает, слейте ее обратно на мастер.
*примечание: по соглашению большинство пользователей git называют свою основную/магистральную ветку "главной".
И для удобного предварительного просмотра изменений перед их добавлением,
git diff
Я использую gitk --all
для визуализации истории изменений и незафиксированных изменений во всех ветках, а также использую git commit -am "сообщение о фиксации"
, чтобы добавить и зафиксировать в одной команде.
Я бы также рекомендовал широко использовать ветки. Я занимаюсь веб-разработкой, поэтому у меня будет основная ветка, отражающая состояние кода на сервере, и я буду создавать новую ветку каждый раз, когда работаю над большой функцией. Таким образом, если у меня есть экстренное исправление ошибки, я могу легко проверить основную ветку, зафиксировать и загрузить исправление, а затем объединить его обратно в незавершенную функцию.