I forked a repository from upstream and there was a patch I like and I would like that patch goes into my forked repository. But at the same time, I would like to pick only a few changes, that is, not the whole commit and at the same time too, I need to make some minor modifications. So here goes how this is done.
Let's check where we are at now.
jason@localhost:~/advanced-policy-firewall$ git branch
* master
rfxn_upstream
robertoberto-patch
support-ipv6
Get the commit id from roberto patch, cherry pick the whole commit but do not commit yet.. just stage at the current branch (which is master)
jason@localhost:~/advanced-policy-firewall$ git cherry-pick -n 0d1df6549820f9592aefb2353b77c52eadbe759f
Auto-merging files/vnet/vnetgen
CONFLICT (content): Merge conflict in files/vnet/vnetgen
error: could not apply 0d1df65... - fixed vnetgen for newer linux distros to prioritize ip over ipconfig
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
jason@localhost:~/advanced-policy-firewall$ git status .
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: README
new file: test/distros_examples/ifconfig_ubuntu_12
new file: test/distros_examples/ifconfig_ubuntu_20
new file: test/distros_examples/ip_addr_ubuntu_12
new file: test/distros_examples/ip_addr_ubuntu_20
new file: test/distros_examples/ip_link_ubuntu_12
new file: test/distros_examples/ip_link_ubuntu_20
Unmerged paths:
(use "git restore --staged <file>..." to unstage)
(use "git add <file>..." to mark resolution)
both modified: files/vnet/vnetgen
Let's get the diff of the stage file
jason@localhost:~/advanced-policy-firewall$ git diff --cached README
diff --git a/README b/README
index 07ad004..0adf39d 100644
--- a/README
+++ b/README
@@ -199,7 +199,7 @@ Fedora Core Any
Slackware 8.0+
Debian GNU/Linux 3.0+
Suse Linux 8.1+
-Unbuntu Any
+Ubuntu Any
TurboLinux Server 9+
TurboLinux Fuji (Desktop)
RedHat Linux 7.3,8,9
Unstage a file because I wanna make minor modification. After changes are make, add it back to the stage
$ git restore --staged test/distros_examples/ip_link_ubuntu_12
$ vim test/distros_examples/ip_link_ubuntu_12
$ git add test/distros_examples/ip_link_ubuntu_12
All good now, let's commit
$ git commit -m "cherry pick but only selected files from roberto patched"
[master 80830c9] cherry pick but only selected files from roberto patched
8 files changed, 330 insertions(+), 28 deletions(-)
create mode 100644 test/distros_examples/ifconfig_ubuntu_12
create mode 100644 test/distros_examples/ifconfig_ubuntu_20
create mode 100644 test/distros_examples/ip_addr_ubuntu_12
create mode 100644 test/distros_examples/ip_addr_ubuntu_20
create mode 100644 test/distros_examples/ip_link_ubuntu_12
create mode 100644 test/distros_examples/ip_link_ubuntu_20
$ git branch
* master
rfxn_upstream
robertoberto-patch
support-ipv6
and we push the changes to github
$ git push
Enumerating objects: 19, done.
Counting objects: 100% (19/19), done.
Delta compression using up to 16 threads
Compressing objects: 100% (13/13), done.
Writing objects: 100% (14/14), 3.68 KiB | 3.68 MiB/s, done.
Total 14 (delta 7), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (7/7), completed with 4 local objects.
To https://github.com/jasonwee/advanced-policy-firewall.git
f98e9bb..80830c9 master -> master
in case you want to see the final result, please visit this github commit.
No comments:
Post a Comment