моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
соответствующая тема:
git reuse recorded resolution
(rerere
) Объединить конфликтующие версии Git.Orphan branches
)если git
Библиотека является локальной, и даже если кодом не нужно делиться удаленно, локальной веткой можно управлять как складом, которым нужно делиться удаленно. Как показано в этом примере, вам необходимо сначала скопировать склад в локальную область, что означает наличие удаленной библиотеки.
# clone the jgit repository to match
$ git clone https://git.eclipse.org/r/jgit/jgit
$ cd jgit
# Whenever you start working on a bug fix or a new
# feature in your project, you should create a branch
$ git branch newBugFix
$ git branch
* master
newBugFix
# The newBugFix branch points to the current HEAD
# to verify this:
$ git log -1 newBugFix --format=format:%H
25fe20b2dbb20cac8aa43c5ad64494ef8ea64ffc
# edit branch description
$ git branch --edit-description newBugFix
# Add description in a newly opened editor
Refactoring the Hydro controller
The hydro controller code is currently horrible needs to be refactored.
# Show the description
$ git config --get branch.newBugFix.description
Refactoring the Hydro controller
The hydro controller code is currently horrible and needs to be refactored.
# Show the commit hash the new branch based on
$ cat .git/refs/heads/newBugFix
25fe20b2dbb20cac8aa43c5ad64494ef8ea64ffc
Видно, что ID
с текущимHEAD
изID
последовательный.
Примечание. После создания новой ветки необходимо переключиться на эту ветку, чтобы использовать:git checkout -b <newBranch>
Развернуть: Если вы не подписаны HEAD
Создайте новую ветку, но с определенным идентификатором фиксации (979e346
), на данный момент представление на основе этой версии можно записать:
# new branch from commit ID
$ git branch anotherBugFix 979e346
$ git log -1 anotherBugFix --format=format:%h
979e346
$ git log -1 anotherBugFix --format=format:%H
979e3467112618cc787e161097986212eaaa4533
# checkout new branch
$ git checkout -b lastBugFix 979e346
Посмотреть информацию о филиале:
git branch
: только название веткиgit branch -v
: Аннотировано и упрощено на основе 1. SHA-1
git branch -vv
: отображать имена ветвей удаленного отслеживания на основе 2$ git branch -v
anotherBugFix 979e346 Interactive Rebase: Do actions if
* lastBugFix 979e346 Interactive Rebase: Do actions if
master 25fe20b Add missing package import for jg
newBugFix 25fe20b Add missing package import for jg
$ git branch -vv
anotherBugFix 979e346 Interactive Rebase: Do actions if e
* lastBugFix 979e346 Interactive Rebase: Do actions if e
master 25fe20b [origin/master] Add missing package
newBugFix 25fe20b Add missing package import for g
Иногда собственный код может быть создан из клона чужой кодовой базы.На этом этапе локальный код имеет удаленный склад, обычно называемыйorigin
источник.Чтобы понять Git и его удаленную базу кода, вы можете начать сgit status
Команда запускается:
$ git checkout -b remoteBugFix --track origin/stable-3.2
Switched to a new branch 'remoteBugFix'
Branch 'remoteBugFix' set up to track remote branch 'stable-3.2' from 'origin'.
видимый,remoteBugFix
Отделение удаленного отслеживания филиалаorigin/stable-3.2
.В это времяgit status
Результаты показывают местноеHEAD
с пультомHEAD
Можно ли быстро перенаправить локальную ветку в удаленную ветку. Примеры следующие:
# Find a commit on remote branch
$ git log -10 origin/stable-3.2 --oneline
# Checkout specific SHA-1
$ git reset --hard 2e0d178
HEAD is now at 2e0d17885 Add recursive variant of Config.getNames() methods
# Use 'git status' to see the free benefit of Git
$ git status
On branch remoteBugFix
Your branch is behind 'origin/stable-3.2' by 9 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
nothing to commit, working tree clean
Уведомление:
fast-forward
, означает, что Git может объединить HEAD
Перейти на последнюю версию;git pull
На самом деле команда представляет собой комбинацию двух команд:git fetch
git merge
(Объединить ветку удаленного отслеживания с локальной веткой)Выполните вышеуказанное git status
команда используется для имитации локального выполненияgit fetch
После этого новый контент из удаленной ветки переносится в локальную ветку отслеживания.origin/stable-3.2
положение дел. Продолжение слияния фактически синхронизируется с локальной веткой:
$ git merge origin/stable-3.2
Updating 2e0d17885..f839d383e
Fast-forward
.../org/eclipse/jgit/api/RebaseCommandTest.java | 213 +++++++++++++++++----
.../src/org/eclipse/jgit/api/RebaseCommand.java | 31 +--
.../jgit/errors/IllegalTodoFileModification.java | 59 ++++++
.../eclipse/jgit/lib/BaseRepositoryBuilder.java | 2 +-
.../src/org/eclipse/jgit/lib/Config.java | 2 +
.../src/org/eclipse/jgit/lib/RebaseTodoLine.java | 16 +-
6 files changed, 266 insertions(+), 57 deletions(-)
create mode 100644 org.eclipse.jgit/src/org/eclipse/jgit/errors/IllegalTodoFileModification.java
По результатам выполнения видно, что как git status
Как указано в подсказке, это слияние представляет собой ускоренное слияние (fast-forward merge
)
Помимо использования при создании локальной ветки --track
Укажите ветку удаленного отслеживания,git
Также имеется поддержка указания удаленных ветвей в существующих ветках. Если вы заранее создадите локальную ветку и забудете связать удаленную ветку,git
Эта функция позднего связывания может оказаться полезной:
# Checkout a new branch without relating to its remote tracking branch
$ git checkout -b remoteBugFix2 2e0d17
Switched to a new branch 'remoteBugFix2'
# Set the tracking branch manually by using -u or --set-upstream-to
$ git branch --set-upstream-to origin/stable-3.2
Branch remoteBugFix2 set up to track remote branch stable-3.2 from origin.
# Validate current status
$ git status
On branch remoteBugFix2
Your branch is behind 'origin/stable-3.2' by 9 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
nothing to commit, working directory clean
# Same as the previous demo as expected.
# Update the branch (also a fast-forward merge with origin/stable-3.2)
$ git pull
Updating 2e0d17885..f839d383e
Fast-forward
.../org/eclipse/jgit/api/RebaseCommandTest.java | 213 +++++++++++++++++----
.../src/org/eclipse/jgit/api/RebaseCommand.java | 31 +--
.../jgit/errors/IllegalTodoFileModification.java | 59 ++++++
.../eclipse/jgit/lib/BaseRepositoryBuilder.java | 2 +-
.../src/org/eclipse/jgit/lib/Config.java | 2 +
.../src/org/eclipse/jgit/lib/RebaseTodoLine.java | 16 +-
6 files changed, 266 insertions(+), 57 deletions(-)
create mode 100644 org.eclipse.jgit/src/org/eclipse/jgit/errors/IllegalTodoFileModification.java
# The output is still the same as previous one as expected.
# Validate the current HEAD with origin/stable-3.2
$ git log -1 origin/stable-3.2 --format=format:%h
f839d383e
# Still the same.
До прочтения этой книги вы, возможно, видели множество примеров цепочек доставки программного обеспечения и моделей ветвления; возможно, вы также пробовали разные стратегии, но обнаружили, что, если инструмент поддерживает определенный рабочий процесс, его трудно полностью реализовать. сценарии применения, которые вы хотите. Git поддерживает практически все сценарии рабочих процессов. Общим требованием является возможность генерировать фиксацию слияния при объединении функции (даже если новые функции могут быть включены в режиме ускоренной перемотки вперед). Такое требование часто используется для обозначения того, что определенный объект был объединен, и вы хотите, чтобы эта операция слияния явно сохранялась в хранилище.
Советы
Тогда как
Git
Обеспечивает удобный и быстрый способ доступа ко всей информации о представленных материалах.Git
На самом деле библиотеку следует использовать какбревно, а не только исходный код резервное копирование。
Следующий пример создаст принудительную фиксацию слияния:
# Checkout branch stable-3.1 as remoteOldBugFix for use
$ git checkout -b remoteOldBugFix --track origin/stable-3.1
# force a merge commit
$ git merge origin/stable-3.2 --no-ff --edit --quiet
Обратите внимание, используйте --edit
После установки параметров вы можете изменить информацию комментариев к фиксации слияния по умолчанию в открывшемся редакторе.в примере--no-ff
Указывает на отключение режима быстрой перемотки вперед;--quiet
Используется для упрощения содержимого вывода на экран. Конечный эффект показан на рисунке:
Для сравнения с обычным способом удалите при выполнении слияния --no-ff
Элементы параметров:
# Reset to initial status
$ git reset --hard remotes/origin/stable-3.1
# Merge with fast forward by default
$ git merge origin/stable-3.2 --quiet
Эффект следующий:
Помимо выполнения полного слияния, Git также позволяет пользователям вмешиваться в объединенный контент и самостоятельно решать, какой контент включается в слияние.использовать--no-commit
параметр,git
Прервет процесс перед фиксацией слияния, позволяя пользователю изменять или добавлять файлы до окончательной фиксации. Например, номер версии проекта изменяется в функциональной ветке проекта, но основная ветка не изменяется. Операция слияния по умолчанию обновит номер версии до номера версии в ветви функции, но на самом деле вы не хотите менять номер версии.Используйте это время--no-commit
можно избежать.
В следующем примере демонстрируется операция слияния с участием пользователя. При слиянии вы хотите вручную исключить коммит, обновивший файл лицензии:
# Clone repo into demo
$ git clone https://github.com/PacktPublishing/Git-Version-Control-Cookbook-Second-Edition_hello_world_flow_model.git demo
$ cd demo
# Checkout remote branch
$ git checkout -b remotePartlyMerge --track origin/release/1.0
Branch remotePartlyMerge set up to track remote branch release/1.0 from origin.
Switched to a new branch 'remotePartlyMerge'
# Force a merge commit with --no-commit flag
$ git merge origin/master --no-ff --no-commit
Automatic merge went well; stopped before committing as requested
# Exclude LICENSE file
$ git reset LICENSE
# Resume merging
$ git commit -m "Merging without LICENSE"
[remotePartlyMerge 1202b0e] Merging without LICENSE
# Check status (only LICENSE file remain untracked)
$ git status
On branch remotePartlyMerge
Your branch is ahead of 'origin/release/1.0' by 6 commits.
(use "git push" to publish your local commits)
Untracked files:
(use "git add <file>..." to include in what will be committed)
LICENSE
nothing added to commit but untracked files present (use "git add" to track)
# check difference excluding LICENSE file (only on Linux)
$ git diff origin/master !(LICENSE)
Учитывая проблему скорости сети, образец репозитория был Git-Version-Control-Cookbook-Second-Edition_hello_world_flow_model.git
Добавить в эту библиотеку обучения (repos/ex3.3-no-commit-repo.rar
)