11. Алиасы
Цели
- Научиться настраивать алиасы и шорткаты для команд git
Для пользователей Windows:
Выполнить:
git config --global alias.co checkout git config --global alias.ci commit git config --global alias.st status git config --global alias.br branch git config --global alias.hist "log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short" git config --global alias.type 'cat-file -t' git config --global alias.dump 'cat-file -p'
Также, для пользователей Unix/Mac:
git status, git add, git commit, git checkout — общие команды, для которых полезно иметь сокращения.
Добавьте следующее в файл .gitconfig в вашем $HOME каталоге.
Файл:
.gitconfig[alias] co = checkout ci = commit st = status br = branch hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short type = cat-file -t dump = cat-file -p
Мы уже успели рассмотреть команды
и status
, в предыдущем уроке рассмотрели команду log
и совсем скоро познакомимся с checkout
. Главное, что стоит запомнить из этого урока, так это то, что теперь вы можете вводить git st
там, где раньше приходилось использовать git status
. Аналогичным образом, пишем git co
вместо git checkout
и git ci
вместо git commit
. Что лучше всего, команда git hist
позволит избежать ввода очень длинной команды log
.
Попробуйте использовать новые команды.
02 Задайте алиасhist
в файле .gitconfig
По большей части, я буду продолжать печатать полные команды в этом руководстве. Единственным исключением будет использование алиаса
, указанного выше, когда мне понадобится посмотреть git лог. Если вы хотите повторять мои действия, убедитесь, что алиас hist
установлен в вашем файле .gitconfig
.
Type
и Dump
Мы добавили несколько алиасов для команд, которых мы еще не рассматривали. С командой git branch
разберемся чуть позже, а команда git cat-file
используется для исследования git, в чем мы вскоре убедимся.
Если ваша оболочка поддерживает алиасы или шорткаты, вы можете добавить алиасы и на этом уровне. Я использую:
Файл:
.profilealias gs='git status ' alias ga='git add ' alias gb='git branch ' alias gc='git commit' alias gd='git diff' alias gco='git checkout ' alias gk='gitk --all&' alias gx='gitx --all' alias got='git ' alias get='git '
Сокращение gco
для команды git checkout
особенно полезно. Оно позволяет мне вводить:
gco <branch>
для переключения в отдельную ветку.
И да, я достаточно часто пишу вместо git
get
или got
, поэтому создам алиасы и для них.
24. Создание ветки
Цели
- Научиться создавать локальную ветку в репозитории
Пора сделать наш hello world более выразительным. Так как это может занять некоторое время, лучше переместить эти изменения в отдельную ветку, чтобы изолировать их от изменений в ветке master.
01 Создайте веткуДавайте назовем нашу новую ветку «style».
Выполните:
git checkout -b style git status
Примечание: git checkout -b <имяветки>
является шорткатом для git branch <имяветки>
за которым идет git checkout <имяветки>
.
Обратите внимание, что команда git status
сообщает о том, что вы находитесь в ветке «style».
Выполните:
touch lib/style.css
Файл:
lib/style.cssh2 { color: red; }
Выполните:
git add lib/style.css git commit -m "Added css stylesheet"03Измените основную страницу
Обновите файл hello.html, чтобы использовать стили style.css.
Файл:
lib/hello.html<!-- Author: Alexander Shvets ([email protected]) --> <html> <head> <link type="text/css" rel="stylesheet" media="all" href="style.css" /> </head> <body> <h2>Hello, World!</h2> </body> </html>
Выполните:
git add lib/hello.html git commit -m "Hello uses style.css"04Измените index.html
Обновите файл index.html, чтобы он тоже использовал style.css
Файл:
index.html<html><head> <link type="text/css" rel="stylesheet" media="all" href="lib/style.css" /> </head> <body> <iframe src="lib/hello.html" /> </body> </html>
Выполните:
git add index.html git commit -m "Updated index.html"05 Далее
Теперь у нас есть новая ветка под названием style с 3 новыми коммитами. Далее мы узнаем, как осуществлять навигацию и переключаться между ветками.
GitHub — kefiriaus/git-how-to
Описание самых основных моментов для начала работы с git
Установка имени и электронной почты
git config --global user.name "Your Name" git config --global user.email "[email protected]"
Параметры установки окончаний строк
git config --global core.autocrlf input git config --global core.safecrlf true
Создание репозитория
mkdir hello cd hello touch hello.html git init
Добавление страницы в репозиторий
git add hello.html (Можно 'git add .' для добавление всех файлов каталога в репозиторий) git commit -m "First Commit"
Проверка статуса репозитория
git status
Добавление изменений в репозиторий
git add hello.html git status
Коммит изменений
#переход к созданию комментария в редакторе git commit #вывод комментария в командной строке git commit -m 'название коммита'#изменение существующего коммита git add hello.html git commit --amend -m "Add an author/email comment"
История изменений
#история изменений git log#однострочная история изменений git log --pretty=oneline #немного вариантов git log --pretty=oneline --max-count=2 git log --pretty=oneline --since='5 minutes ago' git log --pretty=oneline --until='5 minutes ago' git log --pretty=oneline --author= git log --pretty=oneline --all
#удобный вывод истории изменений git log --pretty=format:"%h %ad | %s%d [%an]" --graph --date=short
Алиасы и шорткаты для команд git в файле ~/.gitconfig
[alias] co = checkout ci = commit st = status br = branch hi = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short type = cat-file -t dump = cat-file -p
Алиасы для bash в файле ~/.bashrc
alias gs='git status ' alias ga='git add ' alias gb='git branch ' alias gc='git commit' alias gd='git diff' alias go='git checkout ' alias gk='gitk --all&' alias gx='gitx --all' alias gh='git hi' alias gt='git tag' alias ght='git hi master --all' alias gtype='cat-file -t' alias gdump='cat-file -p'
Переход/Возврат к комиту/тегу/ветке
git checkout [hash]|[tag]|[branchname]
Работа с тегами
#создание тега git tag [tagname]#переключение по тегу git checkout [tagname]
#переключение по тегу к предыдущей версии git checkout [tagname]^ #аналогично git checkout [tagname]~1
#просмотр тегов git tag
#просмотр тегов в логах git hi master --all
#удаление тега git tag -d [tagname]
Отмена изменений для файла hello.html
#отмена изменений в рабочем каталоге git checkout hello.html#отмена проиндексированных изменений git reset HEAD hello.html git checkout hello.html
#отмена коммита в локальном репозитории git revert HEAD --no-edit
Удаление коммита
#для того чтобы коммит не удалился сборщиком мусора ему нужно установить tag git tag oops#сброс коммита git reset --hard [tagname]|[hash]
#показ удаленного коммита с тегом git hi --all
Перемещение файла в пределах репозитория
Переместить файл hello.html в каталог lib#средствами git mkdir lib git mv hello.html lib#средствами OS mkdir lib mv hello.html lib git add lib/hello.html git rm hello.html
Создание ветки в репозитории
git checkout -b [branchname]
Слияние веток
#без конфликта git checkout dev git merge master git hi --all#решение конфликта вручную git checkout dev git merge master git hi --all Auto-merging lib/hello.html CONFLICT (content): Merge conflict in lib/hello.html Automatic merge failed; fix conflicts and then commit the result.
#необходимо отредактировать файл vim lib/hello.html git add lib/hello.html git commit -m "Merged master fixed conflict."
Преобразование
#сброс ветки dev до слияния git checkout dev git hi git reset --hard [hash]#сброс ветки master до конфликта git checkout master git hi git reset --hard [hash] git hist --all
Перебазирование (rebase вместо merge)
git checkout dev git rebase master git hi
Rebase VS Merge
Конечный результат перебазирования очень похож на результат слияния. Ветка dev в настоящее время содержит все свои изменения, а также все изменения ветки master. Однако, дерево коммитов значительно отличается. Дерево коммитов ветки dev было переписано таким образом, что ветка master является частью истории коммитов. Это делает цепь коммитов линейной и гораздо более читабельной.Когда использовать rebase, а когда merge?
Не используйте rebase:- Если ветка является публичной и расшаренной. Переписывание общих веток будет мешать работе других членов команды.
- Когда важна точная история коммитов ветки (так как команда rebase переписывает историю коммитов).
Учитывая приведенные выше рекомендации, я предпочитаю использовать rebase для кратковременных, локальных веток, а merge для веток в публичном репозитории.
Клонирование репозитория
git clone hello cloned_hello
Имена удаленных репозиториев
git remote#более подробно git remote show origin
Локальные и удаленные ветки
#локальные git branch#локальные и удаленные git branch -a
Извлечение изменений из удаленного репозитория
cd ../cloned_hello git fetch git hist --all#слияние с локальным репозиторием git merge origin/master
#или вместо fetch и merge cd ../cloned_hello git pull git hist --all
Добавление локальной ветки, отслеживающей изменения удаленной ветки
git branch --track dev origin/dev git branch -a git hist --max-count=2
Чистый репозиторий
git clone --bare hello hello.git
Добавление удаленного репозитория
cd hello git remote add shared ../hello.git
Отправка изменений в удаленный репозиторий
git checkout master git add README git commit -m "Added shared comment to readme" git push shared master
Извлечение изменений с удаленного репозитория
cd ../cloned_hello git remote add shared ../hello.git git branch --track shared master git pull shared master cat README
Запуск git сервера
#из рабочей директории git daemon --verbose --export-all --base-path=.
Подключение к git серверу
git clone git://localhost/hello.git network_hello cd network_hello ls
8. Подтверждение изменений
Голы
- Чтобы научиться фиксировать в репозиторий
Ну хватит про постановку. Давайте зафиксируем поэтапные изменения в репозитории.
Когда вы ранее использовали git commit
для фиксации первой версии hello.html
в репозиторий, вы включили флаг -m
, который дает комментарий в командной строке.Команда фиксации позволяет интерактивно редактировать комментарии для фиксации. А теперь давайте посмотрим, как это работает.
Если вы опустите флаг -m
в командной строке, git отобразит вас в редакторе по вашему выбору из списка (в порядке приоритета):
- Переменная среды GIT_EDITOR
- Настройка конфигурации ядра. Редактора
- VISUAL переменная среды
- Переменная среды EDITOR
У меня для переменной EDITOR установлено значение emacsclient
(доступно для Linux и Mac).
Давайте зафиксируем сейчас и проверим статус.
Пробег:
git совершить
В своем редакторе вы увидите следующее:
Результат:
| # Пожалуйста, введите сообщение фиксации для ваших изменений. Линии начинаются # с '#' будут проигнорированы, а пустое сообщение прерывает фиксацию. # На ветке мастера # Изменения, которые необходимо зафиксировать: # (используйте "git reset HEAD <файл> ...", чтобы отключить сцену) # # изменено: hello.html #
В первой строке введите комментарий: «Добавлен тег h2».Сохраните файл и выйдите из редактора (чтобы сделать это в редакторе по умолчанию, нажмите ESC, затем введите : wq
и нажмите Enter). Вы должны увидеть…
Результат:
git commit В ожидании Emacs ... [master 569aa96] Добавлен тег h2 1 файл изменен, 1 вставка (+), 1 удаление (-)
«Ожидание Emacs…» получается из программы emacsclient
, отправляющей файл работающей программе emacs и ожидающей ее закрытия. Остальные данные — стандартные сообщения фиксации.
В конце проверим статус.
Пробег:
git статус
Вы увидите…
Результат:
$ git status # На ветке мастера ничего не фиксировать (рабочий каталог чист)
Рабочий каталог чистый, можно продолжать работу.
курсов: b35apo: en: documentation: githowto: start [CourseWare Wiki]
Как использовать GIT с ключом SSH
При разработке приложений с участием нескольких разработчиков управление исходным кодом может быть эффективно реализовано в системе версий, в нашем случае GITu.Он также может удобно обеспечить распределение исходного кода между, например, домашний компьютер, рабочее место в классе и комплекты разработки МЗАПО из единого репозитория git. Для обучения и проектов в FEL, GitLab предоставляет хостинг и управление репозиторием GIT. После регистрации в CTU студенты FEL могут использовать GitLab для своих проектов. Если у вас не установлен (повторно) локальный пароль GitLab, используйте кнопку входа в систему SSO для аутентификации.
Для удобной работы с репозиторием GIT рекомендуется зарегистрировать свой публичный SSH-ключ на Git-сервере (SSH-ключ).
Если вы еще не используете SSH-ключ, вы можете создать его (в Linux) с помощью команды ssh-keygen
, следуя инструкциям в разделе «Удаленный доступ». По умолчанию публичная и приватная части ключа сохраняются в каталоге .ssh
в вашем домашнем каталоге:
ssh-keygen кошка ~ / .ssh / id_rsa.pub
Публичная часть ключа ( id_rsa.pub
) регистрируется в вашем профиле GitLab — ни в коем случае не включайте приватную часть ( id_rsa
) вашего ключа:
Значок вашего профиля в правом верхнем углу → Настройки → SSH-ключи
Защищенная ветка GitLab
Ветвь master
защищена от обратного изменения ранее записанной истории после создания репозитория.Если вам нужно удалить что-то из его истории и пойти другим путем, то вам нужно отменить набор защиты. Настройки защиты веток и отмены указываются в разделе «Настройки» → «Репозиторий» → «Защищенные ветки» GitLab. Будьте осторожны с использованием, вы нарушите историю для проверки других репозиториев, и, возможно, другим потребуются команды git reset origin / master, чтобы снова встать на путь.
Связанные ресурсы
Git: как создавать и применять патчи
Вы можете конвертировать коммиты git в файлы патчей.Они могут быть использованы для применения к другому репозиторию [1] или кем-то еще (например, отправлены при отправке им по электронной почте).
Создание патча
- Внесите изменения и зафиксируйте их.
- Запустите
git format-patch COMMIT_REFERENCE
, чтобы преобразовать все коммиты, начиная с упомянутого коммита (не включая его), в файлы патчей.
Например, вы подготовили 2 коммита. Бега:
Копировать
git format-patch HEAD ~~
Это создаст 2 файла, по одному для каждого коммита, начиная с HEAD ~~
, например:
Копия
0001-make-stuff-more-awesome.пластырь 0002-разрешить-пользователям-быть-заблокирован.patch
Когда фиксация находится в Gitlab , вы можете добавить «.patch» к URL-адресу фиксации, чтобы получить ответ в формате исправления. Сохраните страницу (Ctrl + S) в файл патча и продолжите ниже.
Применение патчей
Вы можете использовать git apply some.patch
, чтобы изменения из файла .patch
применялись к вашему текущему рабочему каталогу. Они будут неустановленными, и вы должны их выполнить.
Чтобы применить патч как фиксацию (с его сообщением о фиксации), используйте git am some.патч
. \
Чтобы применить все исправления, просто запустите:
Копировать
git am * .patch
Обратите внимание, что в некоторых предыдущих версиях вы могли передать имя последнего патча из списка патчей, чтобы также применить все предыдущие патчи:
Копировать
git am 0002-allow-users-to-be-locked.patch # Может больше не работать для вас
Затем у вас есть 2 нерасположенных коммита из файла патча, созданного ранее.
Дополнительная информация
[1] Обратите внимание, что вы можете добавить другие репозитории / каталоги git в качестве удаленного источника.Иногда вы не хотите (или не можете этого сделать), но все равно можете использовать патчи.
Ознакомьтесь с нашей новой электронной книгой:
Научитесь структурировать большие базы кода Ruby on Rails с помощью инструментов, которые вы уже знаете и любите.
Использование Git — как вернуться к предыдущей фиксации | Толани Бенсон | Startup
Git и GitHub — это мощные инструменты, которые позволяют нам отслеживать все наши изменения в наших проектах и, когда мы неизбежно делаем что-то, что их нарушает, возвращаться к предыдущему рабочему состоянию.Мы все знаем об этой обращающей время магии, но не обязательно, как это делать!
Вот быстрое и простое руководство о том, как повернуть время вспять в вашем проекте и вернуться к предыдущей версии.
Фото: Icons8 Team на UnsplashНайдите версию, которую вы хотите вернуться к
У вас есть два варианта:
1) В вашем терминале вы можете ввести:
$ git log --oneline
Вот где это Важно, что вы дали себе описательные сообщения о фиксации! Он покажет в вашем терминале список коммитов вместе с сообщением фиксации, которое вы установили изначально.Если у вас есть достойные сообщения о фиксации и вы знаете, что ищете, вы сможете решить, к какой версии вы хотите вернуться отсюда. Если вам нужна дополнительная информация, такая как время, дата и автор каждой фиксации, вы можете опустить тег --oneline
.
2) Вы можете просмотреть свою историю коммитов в репозитории GitHub через веб-сайт GitHub. Это позволяет вам проверять состояние всех файлов в репо при каждой фиксации, чтобы убедиться, что вы возвращаетесь к правильной версии.
Это полезно, если вы не отправили себе полезные сообщения о фиксации или вы просто не уверены, к какой именно версии вам нужно вернуться. Небольшие и частые коммиты, чтобы ваша история изменений была чистой, избавит вас от необходимости идти этим путем.
Какой бы вариант вы ни использовали, запишите идентификатор фиксации, к которой вы хотите вернуться.
Вернитесь к выбранной фиксации в вашей локальной среде
Используйте git checkout и идентификатор (точно так же, как вы бы проверяли ветку), чтобы вернуться:
$ git checkout.
Не забудьте последний «». — Вам не требуется добавлять это, и может показаться, что это сработало, но если вы оставите это отключенным, это переведет вас в новое «состояние отдельной головы» где вы можете вносить изменения, и это позволит вам делать коммиты, но ничего не будет сохранено, и любые сделанные вами коммиты будут потеряны.
Это приведет вас к версии, к которой вы хотели вернуться в своей локальной среде.
Добавьте эту версию в область подготовки и отправьте на удаленный компьютер.
Таким же образом, как и с любой обычной фиксацией, вы должны добавить все файлы и нажать на удаленный сервер, чтобы сохранить это состояние.
$ git add.
$ git commit -m "Возврат к"
$ git push
Дайте себе немного более информативное сообщение о фиксации — может быть, почему вы возвращаетесь !!
И все! Вы повернули время вспять в своем проекте! Ура!
Git howto — Тут git
ветви
В каком статусе находится моя ветка?
Как пройти в мастер-ветку
Как удалить локальную и удаленную ветку
git push --delete origin feature- <номер> git branch --delete feature- <число>
Как отменить локальные модификации файлов
Иногда лучший способ почувствовать проблему — это погрузиться в нее и играть с кодом.
К сожалению, изменения, внесенные в процесс, иногда оказываются быть менее оптимальным, и в этом случае возврат файла к исходному состояние может быть самым быстрым и простым решением:
git checkout - Gemfile # сбросить указанный путь git checkout - lib bin # также работает с несколькими аргументами
Как отменить локальные коммиты
Увы, иногда нам нужно немного больше времени, чтобы понять, что мы находимся на неправильный путь, и к тому времени одно или несколько изменений, возможно, уже были совершается локально.Вот когда пригодится git reset:
git reset HEAD ~ 2 # отменить последние две фиксации, сохранить изменения git reset --hard HEAD ~ 2 # отменить последние две фиксации, отменить изменения
Как удалить файл из git (git reset, git reset –hard HEAD)
или для всех файлов:
Как удалить файл из git (git rm –cached filename)
Если файлы находятся в индексе git:
Как удалить изменения в файле из git (git checkout — имя файла)
С оболочкой zsh:
Написание для чистой истории (git rebase)
Как сжать мои последние X-коммиты вместе с помощью Git?
Сдавите свои коммиты git для чистой истории
Зафиксируйте рано и совершайте часто. blob / {print substr ($ 0,6)}’ | sort —numeric-sort —key = 2 | cut —complement —characters = 13-40 | numfmt —field = 2 —to = iec-i —suffix = B —padding = 7 —round = ближайший
76981b406428 54B ПРОЧИТАТЬ.мкр 00ce6b3a9383 67B README.md 71af4f16135f 74B машинописный текст / typescript.rst 923b1678531b 113B frameworks / angular / versions / 7.0 / 7.0.rst 0c27ee76f6f5 122B машинописный текст / версии / 3.1 / 3.1.rst 25d7d6868b40 127B .gitignore 9bc137c5d6a6 167B frameworks / angular / angular.rst b82fc8b50da9 172B машинописный текст / typescript.rst eb9dec0b3e56 174B фреймворков / угловой / версии / версии.rst 9f0c65eb24ec 178B машинописный текст / версии / versions.rst 4a8067c30497 197B frameworks / frameworks.rst c0d826815143 201B Pipfile 539c544b94d1 211B.gitlab-ci.yml d84c41553ed5 211B рамки / угловые / версии / 7.0 / 7.0.rst a157a70df495 221B frameworks / angular / versions / versions.rst 1c42b7d1ef77 261B frameworks / angular / версии / versions.rst a785c282288e 344B каркасы / angular / angular.rst c252df948d7c 397B frameworks / angular / angular.rst efc3c9483260 515B index.rst 427e6b8eaf08 549B requirements.txt c968cda42acf 549B requirements.txt 298ea9e213e8 580B Makefile 31824fd89ccb 598B index.rst f06d7c779d0b 598B index.rst d6d9d6d54873 761B Makefile 27f573b87af1 787B марка.летучая мышь bf081acb1295 883B frameworks / angular / angular.svg 32a043e5b580 2,5KiB conf.py ec8c00ef69df 8,3KiB frameworks / angular / AngularJS_logo.svg.png 177e0572915e 11 КБ Pipfile.lock 2396b9a349dc 11 КБ Pipfile.lock 399efb7822c0 20 КБ юмор / black_hole_node_modules.png
Как удалить большие файлы из репозитория git?
Пример
git clone --mirror git: // example.com / some-big-repo.git
java -jar ~ / projects / bfg-1.13.0.jar --strip-blobs-large-than 1M some-big-repo.git
Удаленные файлы ------------- Имя файла Git id -------------------------------------------------- ---- db.dump | 82a870b1 (2,0 ГБ), 05948004 (2,0 ГБ) db.zip | aae0628c (307,4 МБ) db_col.sql | a7369b9b (60,2 МБ) db_col.zip | aae0628c (307,4 МБ) тран.zip | b81913ef (1,1 МБ) Всего было изменено 330 идентификаторов объектов. Полная информация находится здесь: /tmp/log_col.git.bfg-report/2018-09-27/16-05-06 Запуск BFG завершен! Когда будете готовы, запустите: git reflog expire --expire = now --all && git gc --prune = now --aggressive - Вы можете переписать историю в Git - не позволяйте Трампу делать это по-настоящему! Администрация Трампа постоянно лгала, чтобы заставить людей сдаться. говорят правду. Не сдавайтесь: https://www.aclu.org/ -
Настроить хук git
Git: как найти измененные файлы в ветке
29 февраля 2020 г.( Обновление 2020-03-01: есть способ лучше, см. Ниже )
Ситуация
Вы работали над веткой (Git), и вам нужно сгенерировать список файлов, измененных в этой ветке.
Почему?
GitHub показывает это: полезно видеть в PR. (возможно, ждем сюрпризов)
Может быть, вам нужно запустить тесты или линтер, но запуск его для всей кодовой базы занимает вечность. Бег он на выбранных файлах делает его на немного быстрее на . (полностью гипотетически! 😄)
Как этого не делать ..
Сначала я нашел все коммиты в ветке, вручную .
Затем я попытался ввести git log --name-only COMMIT1 COMMIT2
… что было довольно близко.
Список файлов был там … теперь мне нужно было извлечь его из вывода. Мне также нужно было удалить дубликаты (с помощью сортировки | uniq
или awk).
Итог: длинный, подверженный ошибкам и беспорядочный.
Лучший способ
Сначала я нашел все коммиты в ветке, вручную .
Давайте пропустим этот шаг, я вернусь к нему через минуту.
Я не знал, что git diff
также имеет флаг --name-only
!
# git diff --name-only
> git diff --name-only fc5ca53 origin / eval-quantile-libs
Gopkg.замок
Makefile
README.md
attack.go
внутренний / cmd / jsonschema / main.go
lib / metrics.go
lib / metrics_test.go
lib / target.schema.json
lib / targets.go
библиотека / target_test.go
>
Да! Только файлы, без дубликатов.
А как насчет «найти все коммиты?» Нашел на обычном месте.
# git merge-base
> git merge-base master origin / eval-quantile-libs
fc5ca537bf4f01de94b0458729f455289351397e
>
Давайте еще раз проверим git log --graph
:
( нажмите для увеличения )
Выглядит правильно: человек git-merge-base
говорит:
Найдите как можно более хороших общих предков для слияния
Все вместе
При подстановке команд можно объединить обе команды в одной строке:
# git diff --name-only $ (git merge-base )
> git diff --name-only $ (git merge-base master origin / eval-quantile-libs) origin / eval-quantile-libs
Gopkg.замок
Makefile
README.md
attack.go
внутренний / cmd / jsonschema / main.go
lib / metrics.go
lib / metrics_test.go
lib / target.schema.json
lib / targets.go
библиотека / target_test.go
>
Это немного утомительно, вы можете использовать HEAD
, если вы уже находитесь в филиале:
# git diff --name-only $ (git merge-base )
> git diff --name-only $ (git merge-base master HEAD) # <- неявный HEAD
# опущено - но результат тот же!
>
и если master
— обычная справочная ветка, вы можете все это автоматизировать:
# определить функцию:
> git-mod-files () {
> git diff --name-only $ (git merge-base $ {1: -master} HEAD)
>}
> git-mod-files # по умолчанию master
# опущено - но результат тот же!
> git-mod-files origin / inline-body # может указать другую ветку
.github / КОДЕКСЫ
Gopkg.lock
Makefile
README.md
attack.go
внутренний / cmd / jsonschema / main.go
lib / metrics.go
lib / metrics_test.go
lib / target.schema.json
lib / targets.go
библиотека / target_test.go
>
Дополнение
После того, как я написал это, я получил электронное письмо от Натана, который указал, что есть более простой способ сделать это.
Согласно man git-diff
:
git diff [<параметры>] <фиксация> ... <фиксация> [-] [<путь> ...]
Эта форма предназначена для просмотра изменений в ветке, содержащей и до
второй , начиная с общего предка обоих
<совершить>."git diff A ... B" эквивалентно "git diff $ (git
merge-base A B) B ". Вы можете опустить любой из , который имеет
тот же эффект, что и при использовании HEAD.
На всякий случай, если вы занимаетесь экзотикой, следует отметить, что
все в приведенном выше описании, кроме двух последних
формы, использующие нотацию "..", могут быть любыми .
Для более полного списка способов написания см. «УКАЗАНИЕ
REVISIONS "в gitrevisions (7). Однако" diff "касается
сравнение двух конечных точек, а не диапазонов, и обозначений диапазонов
("<фиксация>.. "и" ... ") не означают диапазон как
определены в разделе «УКАЗАНИЕ ДИАПАЗОНОВ» в gitrevisions (7).
Если глаза потускнели, важная часть:
«git diff A ... B» эквивалентно «git diff $ (git merge-base A B) B».
Это выглядит подозрительно близко к тому, что я придумал 🤔
По крайней мере, я был на правильном пути…
# явное: git diff --name-only master ... HEAD
> git diff --name-only master...
Gopkg.lock
Makefile
README.md
attack.go
внутренний / cmd / jsonschema / main.go
lib / metrics.go
lib / metrics_test.go
lib / target.schema.json
lib / targets.go
библиотека / target_test.go
>
Ага, выглядит хорошо!
Обсудить в Twitter
Твитнуть Следуйте @jpalardyРуководство по Git для новичков — как написать хорошее сообщение о фиксации
Вы разработчик и недавно начали использовать Git? Если вам интересно, как лучше всего создать хорошее сообщение о фиксации для вашего проекта, то эта статья создана для вас.
Последнее обновление Время читать 3 мин.После нескольких недель без написания новых статей я возвращаюсь сегодня со следующей частью одной из моих самых популярных публикаций в Google.
Когда я начал писать год назад, я написал статью о том, как начать и создать свой первый репозиторий с помощью Git.
Эта статья ценится сообществом и помогает многим людям каждую неделю. Таким образом, следующая часть этой серии будет посвящена тому, как написать хорошее сообщение о фиксации.
Напоминаем, что сообщение о фиксации — это короткий текст, который вы оставили при сохранении работы в Git. Это сообщение имеет конкретную цель идентифицировать вашу работу.
Просто прочитав его, любой сможет четко понять, чем вы занимались в этой части своей работы.
Хороший пример коммита
Ниже вы можете найти пример последних коммитов на GitHub для AngularJS, популярного фреймворка, разработанного инженерами Google. Как видите, сообщения ясны, и мы можем лучше понять, какая работа была проделана в разных частях.
Например, 24 июля 2019 года компания «gkalpak» обновила «SauceConnect» и перешла на последнюю версию Safari (веб-браузер). Git фиксирует историю репозитория Angular.js GitHub
Почему все не делают коммитов одинаково?
К сожалению, у коммитов нет универсального способа написания. Каждый проект и каждая компания определяют определенные правила для своих нужд.
Не волнуйтесь; вы часто найдете похожие способы написания сообщения.
Тем не менее, я настоятельно рекомендую вам прочитать правила, прежде чем начинать в компании или работать над проектом с открытым исходным кодом.
Я дам вам более подробную информацию об этих правилах позже в этой статье.
Почему важно хорошо писать коммит
Я составил краткий список преимуществ использования хорошего сообщения коммита.
- Лучшее сотрудничество: Если вы работаете в компании над проектом с открытым исходным кодом, важно соблюдать правила для лучшего сотрудничества. Если вы напишете что-то понятное, следуя правилам проекта, другие разработчики смогут работать более эффективно, и им не нужно будет задавать вам вопросы о вашей работе.
Примечание: Если вы работаете над личным проектом, я настоятельно рекомендую вам соблюдать определенные правила. Это повысит вашу продуктивность, а если вы попросите помощи у другого разработчика, ему будет легче начать работу над вашим проектом.
- Лучшее понимание: Вам необходимо создавать четкие и понятные сообщения; это поможет вам и вашему соавтору работать над проектом. Ниже вы можете найти пример истории коммитов git только с неясными сообщениями.Как видите, сложно понять, что сделано.
Плохой git коммитит пример Пример от Джейсона МакКрири
Примечание: Если вы хотите иметь больше примеров плохих коммитов и в то же время получать удовольствие, учетная запись Twitter с именем «gitlost» каждый день пишет в Твиттере смешные и неотфильтрованные коммиты. .
Пример автоматически сгенерированного журнала изменений Git
Если вы хотите написать хорошее сообщение о фиксации, вам нужно следовать некоторым правилам.Я создал контрольный список ниже. Каждый раз, когда вы хотите совершить коммит, найдите время, чтобы обратиться к этому списку.
- Всегда проверяйте свою грамматику. Сообщение, полное ошибок, никогда не бывает приятным. Для этого я рекомендую вам использовать инструмент грамматики. Если вы пишете на английском языке, вы можете использовать Grammarly, Reverso или GrammarCheck. Эти инструменты не идеальны, но они устранят большинство ваших ошибок.
- Одна фиксация, одно изменение. Старайтесь совершать часто. В идеале каждое изменение должно выполняться в отдельном коммите.Вам будет легче вернуться к предыдущей работе.
- Будьте ясны. Когда вы пишете коммит, старайтесь быть максимально прозрачным. Я рекомендую вам использовать простой английский, чтобы сразу перейти к делу.
- Подробная информация о том, что вы сделали. Найдите время, чтобы перечитать свой код, чтобы написать то, что вы сделали. В случае, если вам нужно много подробностей, я рекомендую вам использовать часть описания коммита.
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: Я хочу поделиться с вами более подробной информацией о команде git commit.Если вы не используете программное обеспечение git, вы должны знать, что вы можете создать подробный коммит, набрав эту команду:
$ git commit -m "Title" -m "Description"
Это то же самое, что и раньше, но с вторая часть для описания. Итак, «-m ‘title’» — это короткий заголовок коммита, а «-m ‘description’» — описание, если вам нужно предоставить более подробную информацию.
- Используйте руководство git. Если вы хотите иметь четкую историю коммитов git, я рекомендую вам следовать руководству.Это руководство о том, как совершать коммит. В моем случае я выбрал этот простой от Udacity.