3 ms·
Yes! And git already gives all the pieces to make this work. (Specifically the reflog.)
by aristidb 13y ago
Yes! And git already gives all the pieces to make this work. (Specifically the reflog.)
- jlgreco 13y agoBeing able to write custom update hooks also allows you to do a lot of neat things (in this case, an update hook could prevent non-fastforward pushes).
- crbnw00ts 13y agoYou can already do this with git config, but unfortunately it's a giant hammer that affects the entire repo at once. It is of course possible to write a post-receive hook that denies non-fastforward pushes to specific branches, but really, git should include a config option out of the box to do this at a more granular level. A common workflow is the expectation that people should be able force-push to their own topic branches all they like, but never to the default branch (except in extreme circumstances). Being able to easily set this via a config option would be very helpful in keeping working repos more "safe" from this kind of thing.
- jlgreco 13y agoIdeally personal topic branches, not yet ready for world consumption, would be pushed but to a different repo. This would allow the main repo to have a global "No force pushes!" setting, and would prevent branch name collisions (how many developers have a scratch branch sitting around named 'scratch'?)
- crbnw00ts 13y agoThat's fine for some projects, but not every project follows that flow. One example: ompanies using GitHub Enterprise internally generally don't make every regular contributor to a project have their own fork (or at least they shouldn't, as it creates needless extra overhead). In that case, having some extra granularity around denying non-fastforward pushes to some branches but not others would be a helpful addition.
- cjh_ 13y agoGit provides all the pieces, we just need to put them together in the right way. The issue is that a client may not have fetched for a while before performing the force push, so it may not have all the required refs for performing the rollback. The server of course still has all the refs, so it shouldn't be too hard to add a command (run client side) to invoke the required server-side rollback.