4.6 KiB
When developing new features or doing big changes, it is recommended to branch dev, commit new files and changes into the new branch, and eventually merge into dev all the changes.
This README demonstrates how to perform this procedure. It assumes a branch bootstrap5 is branched and eventually merged into dev after a rebase.
To branch dev into a new branch bootstrap5
git branch -b bootstrap5
Switched to a new branch 'boostrap5'
From this point on, all the commits and changes can be commited regularly in bootstrap5. To push the local branch remotely do
git push -u origin boostrap5
Once all the changes are done it is recommended to rebase boostrap5 into dev. This is to keep the commits history clean, and only add a single commit into dev.
Firstly update the dev branch
git checkout dev
git pull
Then squash all the commits done into bootstrap5 into a single commit. To know how many commits need to be squash ed, the least common commit between dev and bootstrap5 must be found. This is also called the merge base and can be found as follows
git merge-base bootstrap5 dev
1e52154ef6b07be763679e308bf23c919e1d0d93
Now that the SHA1 of the merge base commit is known, an interactive rebase git rebase -i can be performed to squash all the commits in bootstrap5
git rebase -i 1e52154ef6b07be763679e308bf23c919e1d0d93
This will open up an editor.
pick 049daed Adds bootstrap-5.0.0-beta3-dist
pick 04150aa Adds bootstrap-5.0.0
pick 009244f Updates bootstrap-5.0.0-beta3-dist to bootstrap-5.0.0-dist
pick 59e52e5 initial migration to bs v5
pick 0ba8590 porting to bs5
[...]
Replace the work pick with the word squash for all the commits that need to be squash ed. Ideally, only the first commit (d8080ef) will be pick ed and all the other commits will be squash ed.
pick 049daed Adds bootstrap-5.0.0-beta3-dist
squash 04150aa Adds bootstrap-5.0.0
squash 009244f Updates bootstrap-5.0.0-beta3-dist to bootstrap-5.0.0-dist
squash 59e52e5 initial migration to bs v5
squash 0ba8590 porting to bs5
[...]
Save and close the editor to let git begin the squash. Once the squash is done, the editor will be open one more time to edit the comments of the resulting squash ed commit.
# This is a combination of 13 commits.
# The first commit's message is:
Adds bootstrap-5.0.0-beta3-dist
# This is the 2nd commit message:
Adds bootstrap-5.0.0
# This is the 3rd commit message:
Updates bootstrap-5.0.0-beta3-dist to bootstrap-5.0.0-dist
# This is the 4th commit message:
initial migration to bs v5
[...]
Edit as desired and save. Now, update the datetime of the commit that can be old.
git commit --amend --reset-author
Now the commit is ready to be merged into dev. Ideally, before merging into dev, a rebase should be performed. However, depending on how the two branches have diverged, this can result in many conflicts. To rebase into dev:
git rebase dev
If git complains that there are conflics and solving them would result to be too difficult, abort the rebase
git rebase --abort
Now the last step, the actual merge. Switch back to dev and update it.
git checkout dev
Do the merge with
git merge boostrap5
If a problem arise, remove the last commit
git reset HEAD~1
Now all the changes are no more committed and everything is kept in local. Then do what's needed and then re-add and commit all the files into a new commit and push. (e.g. If a new commit is present and you cannot push, reset the last commit, stash everything, pull, then apply the stash and push)
Now dev has all the commits of boostrap5 squashed into a single commit.
Merge Conflicts
Merging can result into conflicts, e.g.,
git merge bootstrap5
Auto-merging scripts/plugins/alerts/security/unexpected_new_device/locales/en.lua
CONFLICT (content): Merge conflict in scripts/plugins/alerts/security/unexpected_new_device/locales/en.lua
[...]
Auto-merging scripts/lua/modules/format_utils.lua
CONFLICT (content): Merge conflict in scripts/lua/modules/format_utils.lua
Auto-merging scripts/lua/modules/discover_utils.lua
Auto-merging scripts/lua/modules/alert_utils.lua
[...]
To resolve conflicts, edit conflicting files (they can be located with git status under Unmerged paths). Conflicts are reported between <<<<<<< and >>>>>>>. Change the code opportunely and remove those symbols. Once the conficts are resolved, mark the resolution with git add <path to the conflicting file>. After all the conflicts are resolved, a final git commit can be run.