git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: How can I easily verify my diffs are in parent branch?

From
Linus Torvalds <torvalds@linux-foundation.org>
Date
Apr 4, 2007, 15:12 UTC
Message-ID
<Pine.LNX.4.64.0704040744160.6730@woody.linux-foundation.org>
In-Reply-To
<1175686583.19898.68.camel@okra.transitives.com>
On Wed, 4 Apr 2007, Alex Bennee wrote:
> 
> This is not the case of looking through the logs for my commit as I'm
> exporting my changes from my tree into the company system through CVS.
> This means all the usual commit tracking benefits are lost.
Yeah, sad.
> So I have a master branch which tracks this master baseline from CVS and
> each release I import a big change set which includes all the fixes that
> went into that baseline.

So all your small diffs get smushed in as part of one *big* change? Or do they still exist in the baseline CVS tree as individual commits?

If they still exist in the CVS tree as individual commits, you're slightly better off: you can use "git patch-id" to generate a hash of all the patches, and compare just the hashes. That allows you to efficiently find patches that have been applied *identically* in both trees.

NOTE! "git-patch-id" generates a hash of a patch by ignoring 
 - line numbers
 - whitespace
 - commit comments
so "identical" means just that the patch has to have the exact same 
context and +/- patterns, but it will still be considered identical if 
it's been moved around (perhaps because some other patch added/removed 
code before it) or if the whitespace has been tweaked.

You can then compare the hashes upstream with all the commits *you* cared about, and see if they are all there. But as noted, this only works if upstream is expected to actually honor patch-boundaries. If you just get a single big changeset that contains *all* the changes, doign this obviously won't work.

NOTE2! I don't think anybody actually *uses* git-patch-id, and what you should do is to use "git cherry" that does this all internally, but it is worth understanding *what* git-cherry does.

So to compare all patch-ID's, you can do
	git cherry cvs-upstream my-branch

adn it should look at all the commits that are in *your* branch but not upstream, and report their ID's preceded by a "-" if they are upstream, and a "+" if they are not.

You can then look at the "+" commits more closely, to see whether maybe they actually did get merged, but got changed/fixed in the process, or whether they really are missing.

> Is there an invocation of git-diff or another tool that can tell me all
> my diffs are present in the big uber-commit of my master branch baseline
> release?

If git cherry doesn't work for you, you're kind of screwed and have to do it manually. Of course, even "manually" can be done with a lot of help from git.

For example, one thing you can do, if the number of commits you have is fairly small, is to just be on your "my-branch" and then do

	git rebase [--merge] cvs-upstream

which will rebase your "my-branch" onto the CVS upstream thing. It will automatically discard any patches that get merged away (which effectively means that they were already there). The end result will be that your branch will now either be identical to "cvs-upstream" (if everything was already there) or will contain the commits that weren't there on top of the new cvs-upstream tip.

NOTE NOTE NOTE! The "git rebase" thing sounds perfect, but the fact is, quite often you'll end up having to help it do its work. It really defaults to just trying to apply the patches (ie without "--merge" it's literally just a fancy

	git-format-patch | git am
pipeline).

So "git rebase" may well be the right thing for you, but quite frankly, it's more likely to work well for simple cases (with no real conflicts with anybody elses work in the same areas) than for anything complicated.

For complicated stuff, you'll be on your own. "git diff pathname" etc..
		Linus
Previous: Andy ParkinsNext: Junio C Hamano
Message 4 of 19 in “How can I easily verify my diffs are in parent branch?”
  1. Alex BenneeApr 4, 2007
  2. Alex RiesenApr 4, 2007
  3. Andy ParkinsApr 4, 2007
  4. Linus TorvaldsApr 4, 2007
  5. Junio C HamanoApr 5, 2007
  6. David KågedalApr 5, 2007
  7. Junio C HamanoApr 5, 2007
  8. Document --left-right option to rev-list.Brian Gernhardt, Apr 5, 2007
  9. Junio C HamanoApr 5, 2007
  10. Alex RiesenApr 7, 2007
  11. 1/2 git-log --cherry-pickJunio C Hamano, Apr 9, 2007
  12. 1/4 Add %m to '--pretty=format:'Junio C Hamano, Apr 10, 2007
  13. 2/4 Refactor patch-id filtering out of git-cherry and git-format-patch.Junio C Hamano, Apr 10, 2007
  14. Johannes SchindelinApr 14, 2007
  15. 3/4 git-log --cherry-pick A...BJunio C Hamano, Apr 10, 2007
  16. 4/4 Documentation: --cherry-pickJunio C Hamano, Apr 10, 2007
  17. 2/2 Add %m to '--pretty=format:'Junio C Hamano, Apr 9, 2007
  18. Alex BenneeApr 11, 2007
  19. Linus TorvaldsApr 11, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.