Re: Rebase Question
From: Jeff King <hidden>
Date: 2021-05-12 00:44:22
On Tue, May 11, 2021 at 05:29:03PM -0700, Bryan Turner wrote:
On Tue, May 11, 2021 at 5:07 PM Andrew Ottaviano [off-list ref] wrote:quoted
Hello all! I’ve used git for a few years now and I think it is an amazing tool! Thank you for your hard work in developing/maintaining it! I really appreciate it! I have a question. Let’s say that my colleague and I branch off of master and are working. Let’s say I’m 5 commits ahead of master and my colleague merges in ahead of me. The logical thing in my mind is to rebase off of master. The difficulty with this is that if I have merge conflicts that show up on my first commit, I have to resolve that stupid thing for every subsequent commit. I could squash, but then I loose branch history, so I don’t really want to do that. I could rebase in interactive mode, but if I recall, I still need to resolve all the conflicts on every commit before it squashes.Have you investigated git rerere[1] at all? Documentation indicates it works for rebase as well as merge, so it might be possible to train that to resolve the conflicts.
I don't think rerere helps here. In a rebase like this, the problem is that it _isn't_ the same conflict. Imagine a case like this: -- >8 -- git init repo cd repo # both branches start with just the line "base" echo base >file git add file git commit -m base # one side adds a new line git checkout -b newline echo another >>file git commit -am 'add a line' # and the other modifies the first line git checkout -b other HEAD^ echo one >file git commit -am one echo two >file git commit -am two # and now we rebase on top of the newline branch git rebase newline -- >8 -- Applying the first commit gets this conflict (in diff3 form) <<<<<<< ours base another ||||||| base base ======= one >>>>>>> theirs After we fix that up to "one\nanother", the second conflict is: <<<<<<< ours one another ||||||| base one ======= two >>>>>>> theirs Likewise, even if you had done the original merge between branch tips, you'd have seen yet another conflict: <<<<<<< ours two ||||||| base base ======= base another >>>>>>> theirs The actual lines changed are the same, but as the nearby context is continually shifting, we don't consider these to be the "same" conflict. -Peff