дерево версий/граф/сеть
- чисто и лаконично
- Подавайте информацию четко
- Легко поддерживать и легко читать
В качестве контрпримера:
Возьмем положительный пример:
Статус git-файла
пройти черезgit statusПроверять
- untracked Новые файлы не добавляются в управление версиями
- unmodify
- modified
- постановка с помощью git add
git diff --stagedилиgit diff --cachedВы можете просмотреть разницу между промежуточным файлом и последним коммитом
Ветки и теги
Разумное использование веток, преимущества веток:
- Одновременное развитие разных функций не конфликтует и может быть проверено независимо друг от друга
- Разрешение конфликтов может быть централизованным
- Отличительная функция или будущая версия
Роль тега заключается в том, чтобы пометить точку фиксации и пометить ее после выпуска версии, чтобы было удобно откатить конкретную версию позже без возврата.
Тег — это запись версии.
Шаги для разработки новых функций
- Вытащите функциональную ветку из ветки разработки
- Разработка и тестирование функциональных веток
- ветка функций перебазировать ветку разработки (почему)
- Слияние ветки функций с веткой разработки
Уведомление:
- Делайте одно дело за раз, напишите четкий комментарий
- Используйте каждый раз, когда вы тянете удаленную ветку
git pull --rebase - Откуда взялась ветвь и где она закончилась?
- перебазировать перед слиянием
шаги по исправлению ошибок
Исправлены ошибки тестовой строки
Аналогично этапам разработки
Онлайн исправления ошибок
- Вытяните ветку исправления из мастера (почему мастер)
- rebase мастер после тестирования
- слить обратно в мастер
Git советы
перебазировать и объединить
git rebaseобычно интерпретируется как变基, также объясняется как衍合.
git mergeиgit rebaseОба могут интегрировать содержимое обеих ветвей, и конечный результат не имеет никакого значения, но перебазирование делает историю коммитов чище.
Например, теперь, когда dev зафиксировал один раз, а master зафиксировал один раз после этого, статус двух ветвей выглядит следующим образом:
git mergeрезультат:
git rebaseрезультат:
Зафиксировать точечный заказ
-
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результат:
Объединенная ветвь и текущая ветвь объединяются в одну линию на графике, а точки объединенной фиксации по одной объединяются в текущую ветвь.
git merge --no-ffрезультат:
Объединенная ветвь и текущая ветвь не находятся на одной линии, точка объединенной фиксации все еще находится на исходной ветке, а новая точка фиксации создается на текущей ветке.
—————————————————————
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的三种参数:- Использовать параметры
--hard, содержимое дерева каталогов, на которое указывает промежуточная область, рабочая область и HEAD, одинаково. - Использовать параметры
--soft, изменяется только указатель HEAD, а промежуточная и рабочая области остаются неизменными. - Использовать параметры
--mixedили без аргументов (по умолчанию--mixed), изменяет контрольную точку и сбрасывает промежуточную область, но не изменяет рабочую область.
- Использовать параметры
—————————————————————
git reflog
Команда для просмотра записи фиксацииgit log,иgit 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