Recently, we had to create a
git patch for the deployment of a 3rd party repository in our code.
Some of the changes we had to apply using the patch mechanism was the creation of a few new files.
We did not want to have an external script to copy the new files to the appropriate locations, so we had to include those new files in the
git patch somehow.
git diff command (with the parameter
--patch) that generates the patch, it ignored the untracked files and so they did not appear in the patch.
To make the untracked files visible to the
git diff command, we staged them (using
git add) and then used the following command to create the patch:
git diff --patch --staged;
git diff [--options] --cached [<commit>] [--] [<path>...]
git diff [--options] --staged [<commit>] [--] [<path>...]
Adding the parameter
--cached allows you to view the changes you staged for the next commit relative to the named <commit>. Typically you would want comparison with the latest commit, so if you do not give <commit>, it defaults to HEAD. If HEAD does not exist (e.g. unborned branches) and <commit> is not given, it shows all staged changes.
--staged is a synonym of
From: man git-diff
In the end our commands to create the patch with the new files and apply it on a new clone of the 3rd party repository was as follows:
#In the folder of the modified repository, where the new files are staged
git diff -p --staged > ~/new.file.patch.diff;
#In the folder of the new clone of the repository, where the new files need to be created
git apply ~/new.file.patch.diff;