Re: [git-users] An equivalent of `--full-history` to git bisect
Hi Ram, good I found this post. Ironically at the same time you written it I struggled with my heavy enterprise git repo (~200k objects) and at that point git was to me really "goddamn idiotic trackload"... Instead looking over the reachable commits, say between May 1 and May 15 git bisect bring me away to Februar or ever to 2015 commits and proudly told about "first wrong commit" in the past ... I decided bisect of 1.9.5 version (enterprise policy) is pretty broken and solved my issue using manual bisecting. Anyway the problem stays in last version of git. And require a solution. What I suggest change logic of bisecting to something like git config bisect.reachable true This behaviour will reduce bisecting only to reachable commits between bad/good points and will never goes away. Maybe if commit will be found at merge commit git bisect can suggest open another round trip to looking into not reachable way, but anyway it should be explicit confirmed by user. BTW, if merge point has more than 2 parents, how git bisect will find "first wrong commit" at the current state? Cheers, Oleg On Tuesday, April 26, 2016 at 10:55:47 PM UTC+2, Ram Rachum wrote: > > Here you go, I used bisect and it showed me the wrong commit (2413) as the > troublemaker: > > Administrator@Turing ~/Dropbox/Desktop/foo (development) > $ git log --graph --full-history > * commit b7a8d7aa001d06eb7491ab5fb447a8dd3aa421a8 > | Author: Ram Rachum > > | Date: Tue Apr 19 17:45:01 2016 +0300 > | > | adding more to some-file > | > * commit 0aa833916e908ea93902a6c4c227f9a884a1bcef > |\ Merge: 2413945 3068c7d > | | Author: Ram Rachum > > | | Date: Tue Apr 19 17:44:31 2016 +0300 > | | > | | Merge branch 'master' into development > | | > | * commit 3068c7d2548f1798b6840f73b13a649937339f28 > | | Author: Ram Rachum > > | | Date: Tue Apr 19 16:02:27 2016 +0300 > | | > | | Adding sugar to coffee > | | > * | commit 24139451ab954b1f0a9ef616775a3dba0ac81669 > |/ Author: Ram Rachum > > | Date: Tue Apr 19 16:01:28 2016 +0300 > | > | Creating some-file > | > * commit cf02fbbc40104cd02eea4c7c6f134ef1fd7b5661 > Author: Ram Rachum > > Date: Tue Apr 19 16:00:47 2016 +0300 > > Create coffee > > Administrator@Turing ~/Dropbox/Desktop/foo (development) > $ git bisect start > > Administrator@Turing ~/Dropbox/Desktop/foo (development|BISECTING) > $ git bisect good 3068 > > Administrator@Turing ~/Dropbox/Desktop/foo (development|BISECTING) > $ git bisect bad b7a8 > Bisecting: 0 revisions left to test after this (roughly 1 step) > [0aa833916e908ea93902a6c4c227f9a884a1bcef] Merge branch 'master' into > development > > Administrator@Turing ~/Dropbox/Desktop/foo ((0aa8339...)|BISECTING) > $ git bisect bad > Bisecting: 0 revisions left to test after this (roughly 0 steps) > [24139451ab954b1f0a9ef616775a3dba0ac81669] Creating some-file > > Administrator@Turing ~/Dropbox/Desktop/foo ((2413945...)|BISECTING) > $ git bisect bad > 24139451ab954b1f0a9ef616775a3dba0ac81669 is the first bad commit > commit 24139451ab954b1f0a9ef616775a3dba0ac81669 > Author: Ram Rachum > > Date: Tue Apr 19 16:01:28 2016 +0300 > > Creating some-file > > :00 100644 > e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 A some-file > > Administrator@Turing ~/Dropbox/Desktop/foo ((2413945...)|BISECTING) > $ > > > On Tue, Apr 26, 2016 at 6:46 PM, Dale R. Worley > wrote: > >> Ram Rachum > writes: >> > $ git log --graph >> > * commit b7a8d7aa001d06eb7491ab5fb447a8dd3aa421a8 >> > | Author: Ram Rachum > >> > | Date: Tue Apr 19 17:45:01 2016 +0300 >> > | >> > | adding more to some-file >> > | >> > * commit 0aa833916e908ea93902a6c4c227f9a884a1bcef >> > |\ Merge: 2413945 3068c7d >> > | | Author: Ram Rachum > >> > | | Date: Tue Apr 19 17:44:31 2016 +0300 >> > | | >> > | | Merge branch 'master' into development >> > | | >> > | * commit 3068c7d2548f1798b6840f73b13a649937339f28 >> > | | Author: Ram Rachum > >> > | | Date: Tue Apr 19 16:02:27 2016 +0300 >> > | | >> > | | Adding sugar to coffee >> > | | >> > * | commit 24139451ab954b1f0a9ef616775a3dba0ac81669 >> > |/ Author: Ram Rachum > >> > | Date: Tue Apr 19 16:01:28 2016 +0300 >> > | >> > | Creating some-file >> > | >> > * commit cf02fbbc40104cd02eea4c7c6f134ef1fd7b5661 >> > Author: Ram Rachum > >> > Date: Tue Apr 19 16:00:47 2016 +0300 >> > >> > Create coffee >> > >> > In the very first commit, the file `coffee` was added. In the commit >> > `3068c7d`, I added a line "sugar" to the `coffee` file. But then I >> merged >> > this branch into the `development` branch, and in that merge, a mistake >> was >> > made and the "sugar" line was removed, leaving `coffee` empty. Then >> another >> > commit `b7a8d7a`, making an unrelated change, was added for good >> measure. >> >> > I also tried
Re: [git-users] An equivalent of `--full-history` to git bisect
Ram Rachum writes: > Administrator@Turing ~/Dropbox/Desktop/foo (development) > $ git bisect start > > Administrator@Turing ~/Dropbox/Desktop/foo (development|BISECTING) > $ git bisect good 3068 > > Administrator@Turing ~/Dropbox/Desktop/foo (development|BISECTING) > $ git bisect bad b7a8 > Bisecting: 0 revisions left to test after this (roughly 1 step) > [0aa833916e908ea93902a6c4c227f9a884a1bcef] Merge branch 'master' into > development > > Administrator@Turing ~/Dropbox/Desktop/foo ((0aa8339...)|BISECTING) > $ git bisect bad > Bisecting: 0 revisions left to test after this (roughly 0 steps) > [24139451ab954b1f0a9ef616775a3dba0ac81669] Creating some-file > > Administrator@Turing ~/Dropbox/Desktop/foo ((2413945...)|BISECTING) > $ git bisect bad > 24139451ab954b1f0a9ef616775a3dba0ac81669 is the first bad commit > commit 24139451ab954b1f0a9ef616775a3dba0ac81669 > Author: Ram Rachum > Date: Tue Apr 19 16:01:28 2016 +0300 > > Creating some-file > > :00 100644 > e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 A some-file > > Administrator@Turing ~/Dropbox/Desktop/foo ((2413945...)|BISECTING) > $ OK, I've had to learn some things first. One is that git-bisect doesn't find the commit along the path between a good commit and a bad commit that introduces a bug. You specify a bad commit and git-bisect finds an "original bad" ancestor: a commit that is an ancestor of the specified bad commit that is bad and has no parent that is bad. In this case, your command "git bisect good 3068" does *not* restrict git-bisect's attention to the commits in 3068..b7a8. It just tells git-bisect that 3068 is good. git-bisect still has to check the ancestors of 2413, which are ancestors of b7a8 but not ancestors of 3068. With this definition, it's clear that git-bisect should identify cf02 as the "original bad" commit, because it's the only one. If it doesn't, that's a bug in Git. And I'm not so surprised that it doesn't handle that special case correctly, it's not an obvious one. You should report that as a problem on the main Git mailing list. Now to solve your problem: What you need to do is redefine "bad" to mean "should have sugar but does not". That is, "is a descendant of 3068 and does not have sugar". When you do that, 2413 becomes good, because it's not a descendant of 3068. And I'll bet that if you say "git bisect good" for 2413 you will get the result you expect. Dale -- You received this message because you are subscribed to the Google Groups "Git for human beings" group. To unsubscribe from this group and stop receiving emails from it, send an email to git-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [git-users] An equivalent of `--full-history` to git bisect
Here you go, I used bisect and it showed me the wrong commit (2413) as the troublemaker: Administrator@Turing ~/Dropbox/Desktop/foo (development) $ git log --graph --full-history * commit b7a8d7aa001d06eb7491ab5fb447a8dd3aa421a8 | Author: Ram Rachum | Date: Tue Apr 19 17:45:01 2016 +0300 | | adding more to some-file | * commit 0aa833916e908ea93902a6c4c227f9a884a1bcef |\ Merge: 2413945 3068c7d | | Author: Ram Rachum | | Date: Tue Apr 19 17:44:31 2016 +0300 | | | | Merge branch 'master' into development | | | * commit 3068c7d2548f1798b6840f73b13a649937339f28 | | Author: Ram Rachum | | Date: Tue Apr 19 16:02:27 2016 +0300 | | | | Adding sugar to coffee | | * | commit 24139451ab954b1f0a9ef616775a3dba0ac81669 |/ Author: Ram Rachum | Date: Tue Apr 19 16:01:28 2016 +0300 | | Creating some-file | * commit cf02fbbc40104cd02eea4c7c6f134ef1fd7b5661 Author: Ram Rachum Date: Tue Apr 19 16:00:47 2016 +0300 Create coffee Administrator@Turing ~/Dropbox/Desktop/foo (development) $ git bisect start Administrator@Turing ~/Dropbox/Desktop/foo (development|BISECTING) $ git bisect good 3068 Administrator@Turing ~/Dropbox/Desktop/foo (development|BISECTING) $ git bisect bad b7a8 Bisecting: 0 revisions left to test after this (roughly 1 step) [0aa833916e908ea93902a6c4c227f9a884a1bcef] Merge branch 'master' into development Administrator@Turing ~/Dropbox/Desktop/foo ((0aa8339...)|BISECTING) $ git bisect bad Bisecting: 0 revisions left to test after this (roughly 0 steps) [24139451ab954b1f0a9ef616775a3dba0ac81669] Creating some-file Administrator@Turing ~/Dropbox/Desktop/foo ((2413945...)|BISECTING) $ git bisect bad 24139451ab954b1f0a9ef616775a3dba0ac81669 is the first bad commit commit 24139451ab954b1f0a9ef616775a3dba0ac81669 Author: Ram Rachum Date: Tue Apr 19 16:01:28 2016 +0300 Creating some-file :00 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 A some-file Administrator@Turing ~/Dropbox/Desktop/foo ((2413945...)|BISECTING) $ On Tue, Apr 26, 2016 at 6:46 PM, Dale R. Worley wrote: > Ram Rachum writes: > > $ git log --graph > > * commit b7a8d7aa001d06eb7491ab5fb447a8dd3aa421a8 > > | Author: Ram Rachum > > | Date: Tue Apr 19 17:45:01 2016 +0300 > > | > > | adding more to some-file > > | > > * commit 0aa833916e908ea93902a6c4c227f9a884a1bcef > > |\ Merge: 2413945 3068c7d > > | | Author: Ram Rachum > > | | Date: Tue Apr 19 17:44:31 2016 +0300 > > | | > > | | Merge branch 'master' into development > > | | > > | * commit 3068c7d2548f1798b6840f73b13a649937339f28 > > | | Author: Ram Rachum > > | | Date: Tue Apr 19 16:02:27 2016 +0300 > > | | > > | | Adding sugar to coffee > > | | > > * | commit 24139451ab954b1f0a9ef616775a3dba0ac81669 > > |/ Author: Ram Rachum > > | Date: Tue Apr 19 16:01:28 2016 +0300 > > | > > | Creating some-file > > | > > * commit cf02fbbc40104cd02eea4c7c6f134ef1fd7b5661 > > Author: Ram Rachum > > Date: Tue Apr 19 16:00:47 2016 +0300 > > > > Create coffee > > > > In the very first commit, the file `coffee` was added. In the commit > > `3068c7d`, I added a line "sugar" to the `coffee` file. But then I merged > > this branch into the `development` branch, and in that merge, a mistake > was > > made and the "sugar" line was removed, leaving `coffee` empty. Then > another > > commit `b7a8d7a`, making an unrelated change, was added for good measure. > > > I also tried using `git bisect` to pin down the two commits, but it > pointed > > me to the wrong commit after I finished doing all the `git bisect bad` > and > > `git bisect good` actions. > > That seems really unlikely, since there is only one path between 3068 > and b7a8. Can you reproduce the behavior and show us how it happened? > > Dale > > -- > You received this message because you are subscribed to a topic in the > Google Groups "Git for human beings" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/git-users/v3__t42qbKE/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > git-users+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Git for human beings" group. To unsubscribe from this group and stop receiving emails from it, send an email to git-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [git-users] An equivalent of `--full-history` to git bisect
Ram Rachum writes: > $ git log --graph > * commit b7a8d7aa001d06eb7491ab5fb447a8dd3aa421a8 > | Author: Ram Rachum > | Date: Tue Apr 19 17:45:01 2016 +0300 > | > | adding more to some-file > | > * commit 0aa833916e908ea93902a6c4c227f9a884a1bcef > |\ Merge: 2413945 3068c7d > | | Author: Ram Rachum > | | Date: Tue Apr 19 17:44:31 2016 +0300 > | | > | | Merge branch 'master' into development > | | > | * commit 3068c7d2548f1798b6840f73b13a649937339f28 > | | Author: Ram Rachum > | | Date: Tue Apr 19 16:02:27 2016 +0300 > | | > | | Adding sugar to coffee > | | > * | commit 24139451ab954b1f0a9ef616775a3dba0ac81669 > |/ Author: Ram Rachum > | Date: Tue Apr 19 16:01:28 2016 +0300 > | > | Creating some-file > | > * commit cf02fbbc40104cd02eea4c7c6f134ef1fd7b5661 > Author: Ram Rachum > Date: Tue Apr 19 16:00:47 2016 +0300 > > Create coffee > > In the very first commit, the file `coffee` was added. In the commit > `3068c7d`, I added a line "sugar" to the `coffee` file. But then I merged > this branch into the `development` branch, and in that merge, a mistake was > made and the "sugar" line was removed, leaving `coffee` empty. Then another > commit `b7a8d7a`, making an unrelated change, was added for good measure. > I also tried using `git bisect` to pin down the two commits, but it pointed > me to the wrong commit after I finished doing all the `git bisect bad` and > `git bisect good` actions. That seems really unlikely, since there is only one path between 3068 and b7a8. Can you reproduce the behavior and show us how it happened? Dale -- You received this message because you are subscribed to the Google Groups "Git for human beings" group. To unsubscribe from this group and stop receiving emails from it, send an email to git-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [git-users] An equivalent of `--full-history` to git bisect
On Fri, Apr 22, 2016 at 5:29 PM, Dale R. Worley wrote: > Ram Rachum writes: > > Then, as I said in the beginning, a friend pointed me towards the > > `--full-history` flag: > > > > $ git log --full-history --graph coffee > > * commit 0aa833916e908ea93902a6c4c227f9a884a1bcef > > |\ Merge: cf02fbb 3068c7d > > | | Author: Ram Rachum > > | | Date: Tue Apr 19 17:44:31 2016 +0300 > > | | > > | | Merge branch 'master' into development > > | | > > | * commit 3068c7d2548f1798b6840f73b13a649937339f28 > > |/ Author: Ram Rachum > > | Date: Tue Apr 19 16:02:27 2016 +0300 > > | > > | Adding sugar to coffee > > | > > * commit cf02fbbc40104cd02eea4c7c6f134ef1fd7b5661 > > Author: Ram Rachum > > Date: Tue Apr 19 16:00:47 2016 +0300 > > > > Create coffee > > > > This makes me happy because it shows the two relevant commits, the one > > adding sugar and the merge that removed it. So my problem is solved. > **But > > I really wish I could know how to make `git bisect` as well.** Does > anyone > > happen to know? > > You have to be careful here. You *think* of commit 0aa833 as removing > sugar, but it only removes sugar with respect to commit 3068c7. It's > *other* parent doesn't have sugar, in fact, has the same file tree as > 0aa833. When you look at 0aa833 as a child of cf02fb, what you see is a > merge that didn't insert sugar that was present in the merged commit. > And if sugar was some debugging print that you added to the branch to > test it, you'd think of things the second way. > > The deep question is "What is the (linear) history of this commit?" You > *think* of the history being 0aa833-3068c7-cf02fbbc, but it's equally > valid to think of it as 0aa833-cf02fbbc. > > Now with regard to git-bisect, how do you define it? The binary search > for "Where was this introduced?" only makes sense along a linear path. > So which linear path should git-bisect choose through the directed > acyclic graph of commits? > The first thing you do with bisect is define a good commit (3068) and a bad commit (b7a8). Any linear path you draw between these two commits will land on the merge (which is the commit that you want to find.) I don't know which linear path git-bisect uses today, but I'm not seeing how it can use a linear path that skips the bad merge. In any case, it would be nice if it'll have an option similar to `--full-history` that'll make it not skip that merge. > > Dale > > -- > You received this message because you are subscribed to a topic in the > Google Groups "Git for human beings" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/git-users/v3__t42qbKE/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > git-users+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Git for human beings" group. To unsubscribe from this group and stop receiving emails from it, send an email to git-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [git-users] An equivalent of `--full-history` to git bisect
Ram Rachum writes: > Then, as I said in the beginning, a friend pointed me towards the > `--full-history` flag: > > $ git log --full-history --graph coffee > * commit 0aa833916e908ea93902a6c4c227f9a884a1bcef > |\ Merge: cf02fbb 3068c7d > | | Author: Ram Rachum > | | Date: Tue Apr 19 17:44:31 2016 +0300 > | | > | | Merge branch 'master' into development > | | > | * commit 3068c7d2548f1798b6840f73b13a649937339f28 > |/ Author: Ram Rachum > | Date: Tue Apr 19 16:02:27 2016 +0300 > | > | Adding sugar to coffee > | > * commit cf02fbbc40104cd02eea4c7c6f134ef1fd7b5661 > Author: Ram Rachum > Date: Tue Apr 19 16:00:47 2016 +0300 > > Create coffee > > This makes me happy because it shows the two relevant commits, the one > adding sugar and the merge that removed it. So my problem is solved. **But > I really wish I could know how to make `git bisect` as well.** Does anyone > happen to know? You have to be careful here. You *think* of commit 0aa833 as removing sugar, but it only removes sugar with respect to commit 3068c7. It's *other* parent doesn't have sugar, in fact, has the same file tree as 0aa833. When you look at 0aa833 as a child of cf02fb, what you see is a merge that didn't insert sugar that was present in the merged commit. And if sugar was some debugging print that you added to the branch to test it, you'd think of things the second way. The deep question is "What is the (linear) history of this commit?" You *think* of the history being 0aa833-3068c7-cf02fbbc, but it's equally valid to think of it as 0aa833-cf02fbbc. Now with regard to git-bisect, how do you define it? The binary search for "Where was this introduced?" only makes sense along a linear path. So which linear path should git-bisect choose through the directed acyclic graph of commits? Dale -- You received this message because you are subscribed to the Google Groups "Git for human beings" group. To unsubscribe from this group and stop receiving emails from it, send an email to git-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[git-users] An equivalent of `--full-history` to git bisect
Hi everyone! I've been using Git heavily for about 7 years. A few days ago I found a behavior that surprised me. I found `git log`, `git blame` and `git bisect` to exhibit this weird behavior. [A friend][1] let me know about the `--full-history` flag to `git log` that solved my problem, and another person showed me that `--full-history` works for `git blame` too . I want to know, for my own education, whether there is an equivalent fix for `git bisect`. Feel free to see the problem for yourself with this repo: https://dl.dropboxusercontent.com/u/1927707/problematic_repo.7z Here is its log: $ git log --graph * commit b7a8d7aa001d06eb7491ab5fb447a8dd3aa421a8 | Author: Ram Rachum | Date: Tue Apr 19 17:45:01 2016 +0300 | | adding more to some-file | * commit 0aa833916e908ea93902a6c4c227f9a884a1bcef |\ Merge: 2413945 3068c7d | | Author: Ram Rachum | | Date: Tue Apr 19 17:44:31 2016 +0300 | | | | Merge branch 'master' into development | | | * commit 3068c7d2548f1798b6840f73b13a649937339f28 | | Author: Ram Rachum | | Date: Tue Apr 19 16:02:27 2016 +0300 | | | | Adding sugar to coffee | | * | commit 24139451ab954b1f0a9ef616775a3dba0ac81669 |/ Author: Ram Rachum | Date: Tue Apr 19 16:01:28 2016 +0300 | | Creating some-file | * commit cf02fbbc40104cd02eea4c7c6f134ef1fd7b5661 Author: Ram Rachum Date: Tue Apr 19 16:00:47 2016 +0300 Create coffee In the very first commit, the file `coffee` was added. In the commit `3068c7d`, I added a line "sugar" to the `coffee` file. But then I merged this branch into the `development` branch, and in that merge, a mistake was made and the "sugar" line was removed, leaving `coffee` empty. Then another commit `b7a8d7a`, making an unrelated change, was added for good measure. Now I'm looking at my coffee, and finding there's no sugar in it. I distinctly remember adding sugar to my coffee. I run `git log coffee`, and get this output: $ git log coffee commit cf02fbbc40104cd02eea4c7c6f134ef1fd7b5661 Author: Ram Rachum Date: Tue Apr 19 16:00:47 2016 +0300 Create coffee That's it. `git log` is showing neither my original commit that added the sugar, nor the merge that removed it. Two very relevant commits that are missing. I was frustrated for about an hour by this problem, because it happened in a huge enterprise repo, where commits are much harder to find manually. I also tried using `git bisect` to pin down the two commits, but it pointed me to the wrong commit after I finished doing all the `git bisect bad` and `git bisect good` actions. Then, as I said in the beginning, a friend pointed me towards the `--full-history` flag: $ git log --full-history --graph coffee * commit 0aa833916e908ea93902a6c4c227f9a884a1bcef |\ Merge: cf02fbb 3068c7d | | Author: Ram Rachum | | Date: Tue Apr 19 17:44:31 2016 +0300 | | | | Merge branch 'master' into development | | | * commit 3068c7d2548f1798b6840f73b13a649937339f28 |/ Author: Ram Rachum | Date: Tue Apr 19 16:02:27 2016 +0300 | | Adding sugar to coffee | * commit cf02fbbc40104cd02eea4c7c6f134ef1fd7b5661 Author: Ram Rachum Date: Tue Apr 19 16:00:47 2016 +0300 Create coffee This makes me happy because it shows the two relevant commits, the one adding sugar and the merge that removed it. So my problem is solved. **But I really wish I could know how to make `git bisect` as well.** Does anyone happen to know? [1]: http://www.syntevo.com/smartgithg/ -- You received this message because you are subscribed to the Google Groups "Git for human beings" group. To unsubscribe from this group and stop receiving emails from it, send an email to git-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.