[Nfd-dev] git rebase question

Spyridon (Spyros) Mastorakis mastorakis at CS.UCLA.EDU
Tue Sep 8 19:50:29 PDT 2015


Hi Junxiao,

why do not you use git cherry-pick hash_of_commit3, while your are on a branch with commit2b as HEAD? I think that this should work. In case that you want to cherry-pick a commit from another remote repo, you will need to follow this process and then use git cherry-pick:

http://stackoverflow.com/a/11477795

Let me know if that works.

--
Spyridon (Spyros) Mastorakis
Personal Website: http://cs.ucla.edu/~mastorakis/
Internet Research Laboratory
PhD Computer Science
UCLA





> On Sep 8, 2015, at 7:41 PM, Junxiao Shi <shijunxiao at email.arizona.edu> wrote:
> 
> Dear folks
> 
> Recently, Alex has been suggesting that commits in a feature branch (such as NFD management refactor, NDNLP implementation, etc) should not be merged until all commits are ready, and developers may start working on an unmerged parent commit.
> This would require the developer to rebase their commits, if the parent commit changes.
> I’m reluctant to do that, but prefers to wait for the parent commit to be merged before starting the next commit, because I had a lot of trouble in rebasing.
> 
> Specifically, my trouble starts with this situation:
> 	• commit1 is already merged.
> 	• commit2a is an unmerged commit on Gerrit, which is based on commit1.
> 	• commit3 is the commit that I’m working on, which is based on commit2a.
> 	• Now commit2a is modified, and the new patchset is commit2b, whose parent is still commit1.
> 	• I want to rebase commit3 on top of commit2b.
> The situation can be re-created with the following git commands:
> git init
> touch file1
> git add file1
> git commit -m "commit1"
> git checkout -b branch2
> touch file2a
> git add file2a
> git commit -m "commit2a"
> git checkout -b branch3
> touch file3
> git add file3
> git commit -m "commit3"
> git checkout branch2
> git rm file2a
> touch file2b
> git add file2b
> git commit -a --amend -m "commit2b"
> git checkout branch3
> git rebase branch2
> 
> Expected: `git log branch3` shows commit1-commit2b-commit3
> Actual: `git log branch3` shows commit1-commit2b-commit2a-commit3
> 
> git doesn't seem to recognize that commit2b is a replacement of commit2a, and therefore keeps both.
> This happens only if there's no conflict between commit2a and commit2b.
> When there's a conflict, git would tell me to run `git rebase --skip` which would give the correct results.
> 
> If Alex or another git guru can help me solve this problem, I would be happy to start using unmerged parent commits.
> 
> Yours, Junxiao
> 





More information about the Nfd-dev mailing list