I'm using some开发者_高级运维 code for which no SCM is used+ and receive occasional updates in the form of all project files although only some of them have been changed only a bit. Up till now I just put my own changes in a git repo and solved these "updates" with a manual git add -p
session which is getting more and more annoying with the amount of my own changes (those that are not determined to be published yet) increasing, and since luckily I did git commit --author "the others"
for aforementioned "patches", I'd like to know:
How can all commits made by one author be separated into a new branch?
(I don't mind rewriting history in this case, the repo is only used by me)
The ideal solution would include a merge of the others' branch into mine after every "patch", but for now a final merge at the end may suffice.
+ yes, the Jedi did feel you cringe there
I recently did this for someone:
git checkout -b other_work <sha1_of_where_to_rebase>
git log --reverse --author=others --format=%H <sha1_range> | xargs -n 1 git cherry-pick
Hope this helps
I'm not quite understanding what you are doing, but the problem you describe with a third party codebase, is called a "vendor branch". Here is how I would handle it:
Make a branch for the third party version, e.g. vendor
. I assume your branch is called master
. When they publish a new version, you can do the following:
git stash # If you have any uncommitted files
git checkout vendor
tar -xzvf [new files] # This might be unzip or whatever, rather than tar
git commit -am "Version xxx from upstream" # Adjust commit message to suit
git checkout master
git merge vendor # Bring changes into your branch (you could use rebase here if you prefer to keep all your changes on top of all their changes)
git stash pop # Restore your uncommitted files
ps. rather than git add -p
, I'd use git gui
. I was sceptical of using a gui to begin with, but I couldn't live without git gui
and gitk
now (or gitx
on a mac).
精彩评论