Skip to contentSkip to conversation

Finding a commit

DISCUSSION Soham Mehta 4 participants 5 messages Jun 15, 2016

lore
Share & tools
lore
#0 lore raw

Given a SHA1 of a commit from one repository (say x), wondering what is a proper way to find out if that commit (change) also exists in a different repository (say y).

Because SHA1 can change if a commit is cherry-picked around, I cannot just grep for that SHA1 from git-rev-list or git-log on 'y'. I need a way to know if a commit with identical changes (as in 'x') is also present in 'y'.

I realize that Author and Timestamp do not change when the commit is moved (fetched, pushed, pulled, rebased, cherry-picked etc). So my current solution relies on grepping for the pair of Author-Timestamp from git-log on 'y'.

Wondering if there is more appropriate way of doing this?

Thanks.
-Soham

#1 lore raw
Quoted 3 lines · Soham Mehta

Because SHA1 can change if a commit is cherry-picked around, I cannot just grep for that SHA1 from git-rev-list or git-log on 'y'. I need a way to know if a commit with identical changes (as in 'x') is also present in 'y'.

I'm really not an expert of git..

but A commit is something like:

Commit -> Tree ---> Blob1, Blob2, Blob3

Commit, Trees and Blobs are all identified by sha1 the commit should keep information on the author, the "parent" commit(s) and so on..
the tree should just keep the "snapshot" of the data..

so I think that if you search for the SHA-1 of the tree you should be fine..

But I don't know how you can get the SHA-1 of the tree from a commit (may be git cat-file <commit-sha> could help you)
and I don't know how to search for that tree around your index...

But I'm sure google (or whatever) has the answer to those questions,

regards,
Daniele

#2 lore raw
Quoted 4 lines · Daniele Segato
Quoted 3 lines · Soham Mehta

Because SHA1 can change if a commit is cherry-picked around, I cannot just grep for that SHA1 from git-rev-list or git-log on 'y'. I need a way to know if a commit with identical changes (as in 'x') is also present in 'y'.

man git-patch-id (online at http://git.or.cz/man/git-patch-id).

Note that if the cherry-pick conflicted, you'll get a different patch-id.

Quoted 4 lines

I'm really not an expert of git..

but A commit is something like:

Quoted 8 lines

Commit -> Tree ---> Blob1, Blob2, Blob3

Commit, Trees and Blobs are all identified by sha1 the commit should keep information on the author, the "parent" commit(s) and so on..
the tree should just keep the "snapshot" of the data..

so I think that if you search for the SHA-1 of the tree you should be fine..

Not if you really want to find out if X was cherry-picked into this repository, because the tree is the *final state* at that commit, which of course includes all preceding changes.

So suppose you have two patches A.diff and B.diff introducing files of the same name; then if you combine them into history as

A -- B

the tree state at B has both files, and hence is different from the tree state of B' in

B' -- A'

because there it only has the file B.

Signature · 2 lines
Thomas Rast
trast@{inf,student}.ethz.ch
#3 lore raw
Quoted 16 lines · Thomas Rast
Quoted 8 lines

Commit -> Tree ---> Blob1, Blob2, Blob3

Commit, Trees and Blobs are all identified by sha1 the commit should keep information on the author, the "parent" commit(s) and so on..
the tree should just keep the "snapshot" of the data..

so I think that if you search for the SHA-1 of the tree you should be fine..

Not if you really want to find out if X was cherry-picked into this repository, because the tree is the *final state* at that commit, which of course includes all preceding changes.

So suppose you have two patches A.diff and B.diff introducing files of the same name; then if you combine them into history as

Quoted 8 lines

 A -- B

the tree state at B has both files, and hence is different from the tree state of B' in

 B' -- A'

because there it only has the file B.

Yes... obviously...
the tree is the snapshot of a complete data set: so if you apply the same patch to different data set you get different trees... thanks for pointing it out.. :)

Regards,
Daniele

#4 lore raw
In reply to Soham Mehta
Quoted 4 lines · Soham Mehta

Given a SHA1 of a commit from one repository (say x), wondering what is a proper way to find out if that commit (change) also exists in a different repository (say y).

Quoted 9 lines

Because SHA1 can change if a commit is cherry-picked around, I cannot just grep for that SHA1 from git-rev-list or git-log on 'y'. I need a way to know if a commit with identical changes (as in 'x') is also present in 'y'.

I realize that Author and Timestamp do not change when the commit is moved (fetched, pushed, pulled, rebased, cherry-picked etc). So my current solution relies on grepping for the pair of Author-Timestamp from git-log on 'y'.

Have you tried git cherry?

Signature · 2 lines
Douglas Campos (qmx)
+55 11 7626 5959