n l i t e d
Dec 22 2017
I have been working on the "Work" branch for a while, finished adding some features, and now I want to see how far it has diverged from the "master" branch.
First I need to make sure everything has been either committed
or thrown away.
git status .
Any files that I want to keep need to be added and committed.
Everything else needs to be either deleted, added to .gitignore,
or overwritten with the committed version.
git checkout -f -- file.txt
Only after the working directory is clean, I switch to the master branch.
git checkout master
Determine how many files have changed.
git diff --stat Work -- > Files.txt
Files.txt is now my ToDo list, I need to determine how each file
changed and decide how to merge it into the master branch. I can do
this the slow, methodical way by looking at each file individually or
I can do it the fast, error-prone way by letting git do it for me.
Get the text differences between the file in Work and the current
version in master. In this example, DbgOut is the Work branch:
S:\Src\HQ\Dev\SB\Chip\VirtualDisk\CryptDisk\Bin>git diff DbgOut -- CreateZip.bat
diff --git a/Bin/CreateZip.bat b/Bin/CreateZip.bat
deleted file mode 100644
index 0a41cec..0000000
--- a/Bin/CreateZip.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-@del CryptDisk.zip
-@C:\Bin\7z\7z a -tzip CryptDisk.zip .\Out\%1\CryptDisk.exe .\Out\%1\CryptDriver2.sys .\Out\%1\CryptIFS.sys
In this case, the file exists only in the DbgOut branch. I need
to decide whether to pull it into the master branch. If I don't need
it, I do nothing. If I do want it, I merge it.
git checkout -p DbgOut -- CreateZip.bat
git add CreateZip.bat
git commit -m "Merged from DbgOut branch."
I can then view the commit log for the file across all branches.
git log --all CreateZip.bat
To selectively cherry-pick text edits I need to extract the Work
version of the file and use an interactive merge tool (Epsilon, Araxis
Merge, etc) to update the current version.
git show Work:./file.txt > file.txt.work
Use the merge tool to merge changes from file.txt.work into file.txt,
then add and commit the merged version.
git add file.txt
git commit -m "Merged changed from Work branch."
I can replace the master version of file.txt with the version from
Work verbatim:
git checkout Work -- file.txt
git add file.txt
git commit -m "Replaced with the version from the Work branch."
The fast and easy way.
git checkout master
git merge Work
git push origin master
This works well when the master branch has remained static while Work changed, and git is able to simply "fast-forward" the master branch. But if there are any files that changed in master git will deposit merge markers in the files. I then need to merge these files before I can submit the changes.
Make sure everything has been committed, ignored, or deleted,
or replaced.
git status .
On branch master
nothing to commit, working tree clean
The updated master branch is pushed to the upstream repo.
git push origin master
I need to decide how to deal with the Work branch. If it is a
historical milestone like a product release, I leave it as-is and only
use it for reference. If it was an experiment that has run its course,
I should delete it.
git branch -d Work
To reuse the branch for further work on the master I need to
reset it to mirror the current state of master. The easiest way
to do this is by deleting and recreating the branch.
git branch -d Work
git checkout -b Work
Or I can keep the branch and overwrite everything with master.
git checkout -f master --
Comments are moderated. Anonymous comments are not visible to other users until approved. The content of comments remains the intellectual property of the poster. Comments may be removed or reused (but not modified) by this site at any time without notice.