问题
In my current project I'm using an open source forum ( https://github.com/vanillaforums/Garden ). I was planning on doing something like this :
git remote add vanilla_remote https://github.com/vanillaforums/Garden.git
git checkout -b vanilla vanilla_remote/master
git checkout master
git read-tree --prefix=vanilla -u vanilla
This way I can make change into the vanilla folder (like changing config) and commit it to my master branch and I can also switch into my vanilla branch to fetch updates. My problem is when I try to merge the branch together
git checkout vanilla
git pull
git checkout master
git merge --squash -s subtree --no-commit vanilla
git commit -a -m "update commit"
The problem is that the "update commit" goes on top of my commits and "overwrite" my change. I would rather like to have my commits replay on top of the update. Is there a simple way to do that? I'm not very good in git so maybe this is the wrong approach. Also, I really don't want to mix my history with the vanilla history.
回答1:
I finished up with this scheme:
Work on my development branch touching files from the subtree.
Update the subtree branch with squashed development commits:
git merge -s subtree --squash --no-commit development
Update the subtree branch with its remote repository.
- Update development with squashed subtree commits:
git merge --squash -s subtree --no-commit subtree
回答2:
If you're looking to work with subtrees, you probably want to use git subtree. It provides a somewhat more user-friendly interface to this sort of thing, including merge/pull commands to merge in a subtree (squashing is optional) and split/push commands to split back apart changes to a subtree and send them back to its own repo.
回答3:
Using
git merge --squash -s subtree --no-commit vanilla
will not "overwrite" your change. I am hoping by "update commit" you mean the commit you did after the subtree merge since it has --no-commit
and will not commit by itself.
回答4:
I too am not a git master (see what I did there ;-) ) ... however, I think you may want to look at the rebase command:
http://book.git-scm.com/4_rebasing.html
来源:https://stackoverflow.com/questions/6475083/git-subtree-workflow