- JupyterLab Git Extension[1] for local diffs (pre-commit diffs)
- nbdime[2] / nbdev[3] for resolving .ipynb git merge conflicts
- GitHub PR code reviews with ReviewNB[4]
- Alternatively, if you don't care about cell outputs then Jupytext[5] to sync .ipynb JSON to markdown
Disclaimer: I built ReviewNB. It's a completely bootstrapped business, 5 years in the making and now used by leading DS teams at Meta, AWS, NASA JPL, AirBnB, Lyft, Affirm, AMD, Microsoft & more[6] for Jupyter Notebook code reviews on GitHub / Bitbucket.
[1] https://github.com/jupyterlab/jupyterlab-git
[2] https://nbdime.readthedocs.io
https://github.com/jupyterlab/jupyterlab-git
Edit: Looking at the source, it does appear to use nbdime under the hood.
[1] nbdime to view local diffs & merge changes
[2] jupytext for 2-way sync between notebook & markdown/scripts
[3] JupyterLab git extension for git clone / pull / push & see visual diffs
[4] Jupyerlab gitplus to create GitHub PRs from JupyterLab
[5] ReviewNB for reviewing & diff'ing notebook PRs / Commits on GitHub
Disclaimer: While I’m the author of last two (GitPlus & ReviewNB), I’ve represented the overall landscape in an unbiased way. I've been working on this specific problem for 3+ years & regularly talk to teams who use GitHub with notebooks.
[1] https://nbdime.readthedocs.io
[2] https://jupytext.readthedocs.io
[3] https://github.com/jupyterlab/jupyterlab-git
https://github.com/jupyterlab/jupyterlab-git
https://github.com/elyra-ai/elyra#notebook-versioning-based-...