Как изящно использовать Git

внешний интерфейс Git Командная строка модульный тест

дерево версий/граф/сеть

  • чисто и лаконично
  • Подавайте информацию четко
  • Легко поддерживать и легко читать

В качестве контрпримера:

image

Возьмем положительный пример:

image

Статус git-файла

пройти черезgit statusПроверять

  • untracked Новые файлы не добавляются в управление версиями
  • unmodify
  • modified
  • постановка с помощью git add

git diff --stagedилиgit diff --cachedВы можете просмотреть разницу между промежуточным файлом и последним коммитом

Ветки и теги

Разумное использование веток, преимущества веток:

  • Одновременное развитие разных функций не конфликтует и может быть проверено независимо друг от друга
  • Разрешение конфликтов может быть централизованным
  • Отличительная функция или будущая версия

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

Тег — это запись версии.

Шаги для разработки новых функций

  1. Вытащите функциональную ветку из ветки разработки
  2. Разработка и тестирование функциональных веток
  3. ветка функций перебазировать ветку разработки (почему)
  4. Слияние ветки функций с веткой разработки

Уведомление:

  • Делайте одно дело за раз, напишите четкий комментарий
  • Используйте каждый раз, когда вы тянете удаленную веткуgit pull --rebase
  • Откуда взялась ветвь и где она закончилась?
  • перебазировать перед слиянием

шаги по исправлению ошибок

Исправлены ошибки тестовой строки

Аналогично этапам разработки

Онлайн исправления ошибок

  1. Вытяните ветку исправления из мастера (почему мастер)
  2. rebase мастер после тестирования
  3. слить обратно в мастер

Git советы

перебазировать и объединить

git rebaseобычно интерпретируется как变基, также объясняется как衍合.

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

Например, теперь, когда dev зафиксировал один раз, а master зафиксировал один раз после этого, статус двух ветвей выглядит следующим образом:

image

git mergeрезультат:

image

git rebaseрезультат:

image

Зафиксировать точечный заказ

  • git mergeПосле этого порядок коммитов совпадает с временным порядком коммитов, то есть коммиты master идут после dev.
  • git rebaseПосле этого последовательность становитсяrebaseветка (мастер) со всеми коммитами впереди, makerebaseКоммиты ветки (dev) выполняютсяrebase, точки фиксации в одной и той же ветке по-прежнему располагаются в хронологическом порядке.

смена ветки

  • После dev rebase master исходные две разветвленные ветки стали перекрывающимися ветвями.Похоже, что dev — это ветвь, извлеченная из последнего мастера.

Когда использовать rebase/merge

Гипотетический сценарий: функция извлечения ветки-a от dev. Затем, когда разработчик хочет объединить содержимое функции-а, используйтеgit merge feature-a; в свою очередь, когда feature-a хочет обновить содержимое dev, используйтеgit rebase dev.

При его использовании это в основном зависит от «первичной и вторичной» связи двух ветвей.

Уведомление

Вообще говоря,rebaseпост-разработчик и удаленныйorigin/devПроизойдет разделение, и интерфейс командной строки предложит:

Your branch and 'origin/dev' have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

В это время вам нужно использоватьgit push -fПринудительно нажать, перезаписать удаленную ветку. Если вы используете подсказкуgit pull, результат становится слиянием и создает точку фиксации слияния.

Используйте с осторожностьюgit push -f!

—————————————————————

git merge --no-ff

--no-ffне означает быстрого слияния

Различия с git слиянием

git mergeрезультат:

Объединенная ветвь и текущая ветвь объединяются в одну линию на графике, а точки объединенной фиксации по одной объединяются в текущую ветвь.

image

git merge --no-ffрезультат:

Объединенная ветвь и текущая ветвь не находятся на одной линии, точка объединенной фиксации все еще находится на исходной ветке, а новая точка фиксации создается на текущей ветке.

image

—————————————————————

git rebase -i операция

Он используется для организации представлений и информации о представлении. Кажется, это не очень просто в использовании. См. Демо:

git rebase -i devЗатем войдите в следующий интерфейс.

1 pick ffc75a4 修改
2 pick 6c2217f bbb
3 pick a615960 修改a 1
4 pick e4817b3 修改a 2
5 pick 8550690 修改a 3
6
7 # Rebase 3190ea4..8550690 onto 3190ea4 (5 command(s))
8 #
9 # Commands:
10 # p, pick = use commit
11 # r, reword = use commit, but edit the commit message
12 # e, edit = use commit, but stop for amending
13 # s, squash = use commit, but meld into previous commit
14 # f, fixup = like "squash", but discard this commit's log message
15 # x, exec = run command (the rest of the line) using shell
16 # d, drop = remove commit
17 #
18 # These lines can be re-ordered; they are executed from top to bottom.
19 #
20 # If you remove a line here THAT COMMIT WILL BE LOST.
21 #
22 # However, if you remove everything, the rebase will be aborted.
23 #
24 # Note that empty commits are commented out

Изменить начало комментария фиксацииpick, для фиксации слияния, гдеrзаключается в том, чтобы сохранить представление, изменить информацию о представлении,fзаключается в том, чтобы сохранить фиксацию, но отбросить сообщение фиксации.

1 r ffc75a4 修改
2 f 6c2217f bbb
3 r a615960 修改a 1
4 f e4817b3 修改a 2
5 f 8550690 修改a 3

Затем войдите в редактор и нажмите дваrИнтерфейс информации о представлении, изменить информацию о представлении и сохранить ее.

В это время еще раз посмотрите на журнал, и только что 5 представлений стали 2 представлениями.

commit 94784f0c163bc4b2970f73066c91fac16b64be32
Author: ***
Date:   Mon Jan 8 17:01:57 2018 +0800

    修改a

commit 52907b261821afb0c38754ba95545ff8826910db
Author: ***
Date:   Mon Jan 8 16:28:05 2018 +0800

    修改b

—————————————————————

git pull --rebase

Отличие от git pull

В общем, с и без--rebaseНет никакой разницы.

Однако из вышеизложенногоgit rebaseвозможность отделения ветки от удаленной ветки, и когда выpullиспользовать, когдаgit pull, он станет вашей локальной ветвью, объединенной с удаленной ветвью.

Правильный способgit pull --rebase, будет извлечена последняя ветвь.

Поэтому рекомендуется в любое времяpullУдаленное отделение, желательно с--rebaseпараметр.

—————————————————————

сбросить и вернуть

  • git resetИзменить местоположение, на которое указывает HEAD
  • git revertВосстановите фиксацию и создайте новую фиксацию для записи восстановления

git сбросить общие команды

  • git reset HEAD {filename}: отмените временный файл и восстановите измененное и неустановленное состояние.

  • git reset HEAD~{n}: означает откат кnпрежде чем совершить. Его также можно использовать для слияния коммитов, как показано ниже.git commit --amendРезультат тот же.

git reset HEAD~1
git commit
  • git reset {version}: за которым следует номер версии, прямой откат к указанной версии.

  • git reset的三种参数:

    1. Использовать параметры--hard, содержимое дерева каталогов, на которое указывает промежуточная область, рабочая область и HEAD, одинаково.
    2. Использовать параметры--soft, изменяется только указатель HEAD, а промежуточная и рабочая области остаются неизменными.
    3. Использовать параметры--mixedили без аргументов (по умолчанию--mixed), изменяет контрольную точку и сбрасывает промежуточную область, но не изменяет рабочую область.

—————————————————————

git reflog

Команда для просмотра записи фиксацииgit loggit reflogФункция состоит в том, чтобы просмотреть локальную запись операции, вы можете увидеть локальнуюcommit, merge, rebaseи другие записи операций с номерами версий.

b3bf634 HEAD@{0}: rebase -i (finish): returning to refs/heads/feature-rebase-i
b3bf634 HEAD@{1}: rebase -i (fixup): 完善a中的判断和输出
dd19de3 HEAD@{2}: rebase -i (fixup): # This is a combination of 2 commits.
c138acf HEAD@{3}: rebase -i (reword): 完善a中的判断和输出
a7f47b2 HEAD@{5}: rebase -i (start): checkout dev
a472934 HEAD@{6}: rebase: aborting
a7f47b2 HEAD@{7}: rebase -i (start): checkout dev
a472934 HEAD@{8}: commit: 添加a输出
c84d5b7 HEAD@{9}: commit: 添加a中的判断
a5a6e64 HEAD@{10}: commit: 修改a内容
a7f47b2 HEAD@{11}: checkout: moving from dev to feature-rebase-i

—————————————————————

git stash

Кэшируйте содержимое рабочей области в стеке, затем используйтеgit stash popвыиграть. Полезно, когда вы не зафиксировали свое рабочее пространство, но хотите перейти в другую ветку.

Уведомление

Не рекомендуется использовать один и тот же период времени на разных ветках.git stash, если задействовано несколько веток, то лучше сначала закоммитить, а не пушить на удалёнку, он будет доступен при следующем коммите--amendобъединены в последний коммит.

Автор: Front-end team Lilac Garden - lwenn