дерево версий/граф/сеть
- чисто и лаконично
- Подавайте информацию четко
- Легко поддерживать и легко читать
В качестве контрпримера:
Возьмем положительный пример:
Статус 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