Статьи

8 полезных, но не очень известных Git-концепций

Для расширенного использования Git я обычно использую графический интерфейс GitHub или BitBucket. Но  способ GUI может не решить некоторые требования красиво.

Я нашел несколько фундаментальных концепций Git. Они весьма полезны, но, возможно, не очень известны.

Проверьте это и дайте мне знать, что вы думаете!


Q: Что  такое файл .gitkeep ?

Вы можете очень хорошо знать. Gitignore. Но что такое .gitkeep?

По умолчанию Git не отслеживает пустые каталоги. Файл должен существовать в нем. Мы можем использовать файл .gitkeep, чтобы добавить пустые каталоги в репозиторий git.


Q: Что за мерзость вишня ?

Выберите изменения из другой ветви, затем примените их к текущей ветви.

И это обычно происходит до слияния веток .

$ git checkout $my_branch
$ git cherry-pick $git_revision

На рисунке ниже мы выбираем вишню  C D E от ветви 2 до ветви 1.


Q: Как настроить два URL удаленного репо  для одного локального git репо.

Иногда мне нужно нажать, прежде чем я смогу проверить, поэтому я могу нажимать довольно часто. Я не хочу, чтобы у каждого было слишком много маленьких толчков или слишком много пуш-уведомлений. Так что я обычно делаю?

(Предупреждение: это не может быть хорошей практикой для некоторых проектов с точки зрения безопасности кода.)

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

$ git clone git@github.com:devops/denny-repo.git

$ git config remote.myremote.url git@bitbucket.org:devops/denny-repo.git
$ git config remote.origin.url git@github.com:devops/denny-repo.git

$ cat .git/config

$ git push origin master # origin points to github
$ git push bitbucket master # myremote points to bitbucket

Q: Что такое git stash ?

Сохранять локальные изменения без git commit или git push. Переключитесь на другую ветку, затем зайдите позже.

# Shelve and restore incomplete changes

# Temporarily stores all modified tracked files
$ git stash

# Restores the most recently stashed files
$ git stash pop

# Lists all stashed changesets
$ git stash list

# Discards the most recently stashed changeset
$ git stash drop

Q: Что такое git rebase ?

git-rebase: Повторно применить коммит поверх другого базового наконечника. Если вас не волнует история ваших git коммитов, вы можете пропустить «git rebase», но если вы предпочитаете чистую, линейную историю, свободную от ненужных коммитов слияний , вам следует обратиться к git rebase вместо git merge при интеграции изменений из другая ветка.


Q: Что такое Git Squash ?

У вас может быть несколько локальных коммитов git. Теперь запустите «git push», и он сгенерирует несколько историй git commit. Чтобы объединить их как единое целое, мы можем использовать технику «git squash».

# get local 3 latest commits
$ git rebase -i HEAD~3

# In editor, change "pick" to "squash". Keep the first one as "pick"

$ git rebase --continue
$ git push origin $branch_name

Q: Что такое Git Revert ?

Забавная метафора — думать о Git как о утилите управления временными рамками. Коммиты — это моментальные снимки или точки интереса. Кроме того, несколькими временными шкалами можно управлять с помощью ветвей.

При «отмене» в Git вы, как правило, возвращаетесь назад во времени или к другой временной шкале, где ошибок не было.

  • [Отменить локальные изменения] Когда изменения еще не были переданы

Если я хочу полностью отменить локальные изменения, я буду использовать git checkout. Когда репо мало, я могу даже запустить «git clone», а затем «git checkout».

$ git checkout $branch_name
  • [Отменить общедоступные изменения] Когда изменения были сданы еще

$ git log -n 5
$ git revert $git_revision
$ git push origin $branch_name
  • Как отменить git pull?

команда Сфера Общие случаи использования
git reset Фиксировать уровня выбросить незафиксированные изменения
git reset Файл уровня Удалить из файла
Git Checkout Фиксировать уровня Переключайтесь между ветками или просматривайте старые снимки
Git Checkout Файл уровня Отменить изменения в рабочем каталоге
мерзавец вернуться Фиксировать уровня Отменить фиксацию в публичной ветке
мерзавец вернуться Файл уровня (N / A)

Q: Что такое git reflog ?

Git поддерживает список контрольных точек, доступ к которым можно получить с помощью reflog.

Вы можете использовать reflog, чтобы отменить слияния , восстановить потерянные коммиты или ветки и многое другое.


Шпаргалка из моих частых команд Git:

имя Резюме
Показать последнюю историю с одной строкой для каждого git log -n 10 –oneline
Проверьте git log по шаблонам git log –grep = ”$ pattern”
Проверьте git log по файлам git log — foo.py bar.py
Изменить последнее сообщение о коммите git commit –amend
Проверьте конфигурацию git для текущего репо git config –list
Удалить локальную ветку git branch -D $ branch
Удалить удаленную ветку git push origin –delete $ branch
Удалить локальный тег git tag -d $ tag
Удалить удаленный тег git push –delete origin $ tag