-
(hidden) bWONL1x3f #[[(hidden) S-ygYfi0j]]
-
(hidden) 16uuK2Dt7 [[(hidden) SZp9S9TdD]]
-
{{[[DONE]]}} (hidden) 3x91kXb6i
-
(hidden) 9Szy_Bi0r [[the problem with git flow]]
-
(hidden) 2cAaqGSAO re::
-
{{[[TODO]]}} (hidden) BPtacaSdj
-
{{[[TODO]]}} (hidden) nt7jJTh_s
-
(hidden) 87TVnOtpb
-
-
(hidden) hTX1BaCsU
-
-
(hidden) RbX3ibqWW
-
{{[[TODO]]}} (hidden) -Mfuyp0i4 #read
-
(hidden) IRaCAhrT5
-
[[codemods]]
-
(hidden) jvjxB_CNW
-
-
(hidden) NPBT9U7Me
-
(hidden) wSbFkfavN [[export-html-pages]]
-
(hidden) amKjjjowt
-
{{[[TODO]]}} (hidden) fohuqO0V_ #read
-
(hidden) GRHMk9j4L
-
{{[[TODO]]}} (hidden) O2jmu2HaJ [[high signal]] [[(hidden) QNAsExxF-]] [[(hidden) WCJoz9AhZ]] #read
-
(hidden) GWp6KJQwN #[[(hidden) G97ohL3l8]]
-
(hidden) Xw61VF6__
-
(hidden) veThsXZun
-
(hidden) rEjDCLxWv
-
(hidden) lSSvQ9jTM
-
(hidden) Ql9vm8Ogw observation:: [[(hidden) K33crXUkB]] [[(hidden) S-ygYfi0j]] [[(hidden) uPOBlo7Jd]] #bs
-
{{[[TODO]]}} (hidden) 2nszJAZO0 #read #[[(hidden) i_cnRYnI4]]
-
(hidden) Wl6LPy4Qr
-
(hidden) vAPhrzJVA
-
(hidden) 2umXK-8yL
-
{{[[TODO]]}} (hidden) 78oQQ9zC0 [[(hidden) QNAsExxF-]] [[(hidden) SZp9S9TdD]] #re
-
(hidden) A6pdfDzBc
-
(hidden) UWU8z3VWz [[(hidden) LhGHAYn1A]]
-
(hidden) T_5YRmQDU
-
-
(hidden) TvfH2_71C
-
(hidden) i9zLzJZ9v [[sibling]] [[(hidden) hC4jWR2AF]] [[roam]] re::
-
(hidden) PKeY7DhPB
-
(hidden) 5d50uyOyk
-
(hidden) iJTYk5kLU
-
[[git-stacked-rebase]]
-
{{[[TODO]]}} a thought that's been circulating the past few days -- eventually, if/when we make the tool (both CLI & the underlying library) good, it might make sense to explore the possibilities of creating a [[browser extension]] for e.g. [[github]], that would allow it's users to view stacked diffs in the same PR (design of the tool checks out as well w/ this specific case)
-
though, i haven't used [[(hidden) Qb76iqf_n]] myself and don't know how good it could look like -- would be really interesting to see beforehand.
-
because we might not even need this at all, and perhaps the [[host-specific adapters for git-stacked-rebase]] would be completely enough to automate the manual parts so that it wouldn't matter as much of having multiple PRs vs one
-
though, i intentionally don't put the [[host-specific adapters for git-stacked-rebase]] as the first priority here, because it feels like being able to integrate into the existing ecosystem, while creating some additional extras ([[browser extension]]) to make it easier to use [1], is the right approach
-
[1] i think specifically the issue of having comments in separate PRs is important -- if you decide to split out a PR into multiple ones, then some comments will get lost, because we do not control in which PR they appear - we only control the PRs & the commits.
-
-
[[(hidden) Qb76iqf_n]] is out of maintenance, i can't even try out stacked diffs lol
-
searching "mercurial stacked diffs"
-
https://news.ycombinator.com/item?id=18137995
-
{{[[DONE]]}} #read [[(hidden) URRQcDCig]]'s [[(hidden) QNhvoR74k]]
-
https://cacm.acm.org/magazines/2016/7/204032-why-google-stores-billions-of-lines-of-code-in-a-single-repository/fulltext
-
very interesting stuff!
-
i prefer monorepos myself. ofc, haven't worked anywhere near close to such scale, but would be amazing if [[git]] had more of a first-hand support, incl. an eco-system around it... [[(hidden) 42siTzw1w]]
-
https://pipedrive.slack.com/archives/C7R3EPWER/p1568022631016000
-
-
-
-
-
-
-
-
(hidden) ZdlAR5JxT
-
[[git-stacked-rebase]]
-
#[[(hidden) G97ohL3l8]]#[[(hidden) G97ohL3l8]] how it works, the tricky parts, & things to be aware of instead of rebasing one partial branch on top of another, we always use the latest branch and rebase it onto the initial branch, and then reset the partial branches to point to new commits. the last part is the hardest, and likely still has many bugs yet unsolved. the tricky part comes from the power of git-rebase. as long as a rebase finishes without exiting, we are golden. but, as soon as a user indicates that they want to do some further operations, by e.g. changing a command from `pick` to `edit` or `break`, then git-rebase, when it reaches that point, has to exit (!) to let the user do whatever actions they want to do, and of course allows the user to continue the rebase via `git rebase --continue`. <!-- this ability to pause the execution of the rebase, and then continue later on, is very powerful & useful, and the fact that it makes our job harder is not a bad thing; rather, it[[(hidden) G97ohL3l8]]39;s a natural occurence <++> --> why this matters is because we need to recover the branches to point to the new commits. git, upon finishing (?) the rebase, writes out a file inside `.git/rebase-{merge|apply}/` -- `rewritten-list`. this file contains the rewritten list of commits - either `1 -> 1` mapping, or, if multiple commits got merged into 1 (e.g. `squash` / `fixup` / manually with `edit`, or similar), `N -> 1` mapping (?). it[[(hidden) G97ohL3l8]]39;s very simple - old commit SHA, space, new commit SHA, newline. again, this is how we understand the new positions that the branches need to be poiting to. and no, we cannot simply use the `git-rebase-todo` file (the one you edit when launching `git rebase -i` / `git-stacked-rebase`), because of commands like `break`, `edit`, etc., whom, again, allow you to modify the history, and we cannot infer of what will happen by simply using the `git-rebase-todo` file. <!-- now, issue(s) come up when --> let[[(hidden) G97ohL3l8]]39;s first do a scenario without the issue(s) that we[[(hidden) G97ohL3l8]]39;ll describe soon - you ran `git-stacked-rebase`, you did some `fixup`s, `squash`es, `reword`s, etc. - stuff that _does not_ make git-rebase exit. all went well, git-rebase wrote out the `rewritten-list` file, we snagged it up with a `post-rewrite` script that we placed inside `.git/hooks/`, we combined it with the now outdated `git-rebase-todo` file (old SHAs etc.) to figure out where the branch boundaries (partial branches) should end up at in the new history, and we reset them successfully. all good and well. now, the scenario w/ a potential issue (?) -- you did all the same as above, but you also had an `edit` command, and when git-rebase progressed to it, you `git reset HEAD~` your commit and instead create 3 new commits, and then continued & the rebase via `git rebase --continue`. since `git-rebase` exited before it was done, we, `git-stacked-rebase`, were __not__ able to reset the branches to the new history, because of course, if git-rebase exits, but the rebase is still in progress, we know you are _not_ done, thus we exit as well. so when you finish, your changes are applied to your latest branch, __but__ the partial branches are now out of date. what you need to do in this case is run `git-stacked-rebase <branch> --apply`, which, in the 1st scenario, happened automatically. __the real issue arises when you forget to do the `--apply` part in time__, i.e. if you do any other history rewritting, including `git commit --amend`, before you `--apply`ied, `git-stacked-rebase` can no longer (?) properly figure out where the partial branches should point to, and you[[(hidden) G97ohL3l8]]39;re stuck in having to do it manually. in the future, we might consider storing the list of partial branches and if they end up gone, we could e.g. place them at the end of the `git-rebase-todo` file the next time you invoke `git-stacked-rebase`, thus you[[(hidden) G97ohL3l8]]39;d be able to drag them into their proper places yourself. but until then, beware this issue exists (?).
-
-
(hidden) wLd33Re5n
-
[[git-stacked-rebase]]
-
{{[[TODO]]}} we should get rid of the `branch-end-last` -- we still need to validate that some `branch-end` is the very last command, but not having an explicit `-last` will (should?) make it easier to create new branches that supersede the current latest branch
-
e.g. implementing [--continue](((fSZIj6gkh))) on top already existing `feat/a-lot-of-stuff-not-only-e2e-tests`
-
realized when:: [writing out the problem](((VXifeHC7T))) in thorough (even too thorough?) detail, __and__ then playing with the tool a bit, to experiment w/ the written-out case - up until had to do `grc`, aka `git rebase --continue`
-
{{[[TODO]]}} though, might be [[trickier than seems at first sight]], especially because of the design of the tool & how we use the latest branch & only reset the partial branches -- here, the latest branch changes -- will need extra handling
-
observation:: `git commit --amend` also triggers the `post-rewrite` script -- perhaps could do some handling there, since it's a common use case?
-
-
-
(hidden) DfJPwFpAW
-
[[git-stacked-rebase]]
-
{{[[TODO]]}} `--nuke`, and probably `--new` commands, to `rm -rf .git/stacked-rebase/`, and start from a new state
-
(hidden) AV7J4zqkD:: happend when i wanted to [create a new latest branch](((MGcMUoEUS))) and had to `ben temp1`, `git checkout temp1` (auto), `git reset --hard origin/old-latest`, `git checkout old-latest`, `git push -f`, `git checkout -`, `git branch -m feat/new-latest`, `git push -u` -- the `temp1` branch no longer existed, but the old todo was still there
-
could happen in more cases. ideally wouldn't happen at all ofc, but cannot be sure.
-
{{[[TODO]]}} though, should we create this as an option even?
-
because, unless you __really__ know that you need to `rm -rf .git/stacked-rebase`, you shouldn't do it, just because e.g. something broke, but not because the state is old, but because you did something wrong yourself & `rm -rf` wouldn't help in that case; rather, would make it even worse
-
{{[[TODO]]}} what's clear is that i should document that this can happen, and how to know that it's right to `rm -rf`. we can think about adding an option later.
-
-
-
{{[[TODO]]}} respect local overrides of [[git]]'s config, i.e. `git -c stackedrebase.autoApplyIfNeeded=false stacked-rebase origin/master`
-
-
(hidden) EFzdV7_0d
-
[[git-stacked-rebase]]
-
(hidden) QN7jcWxIP
-
[[git-stacked-rebase]]
-
(hidden) wlDLZmTBh
-
(hidden) eMn7ZGB9N
-
(hidden) 2aCkiV-4J
-
(hidden) xQSzRy1nV
-
(hidden) -BrojbERr
-
(hidden) gQDW1SDNs
-
(hidden) czYCsf3xF
-
(hidden) tuWCszRDj