{"id":13941340,"url":"https://github.com/bartman/git-wip","last_synced_at":"2026-04-02T13:54:24.962Z","repository":{"id":714135,"uuid":"361036","full_name":"bartman/git-wip","owner":"bartman","description":"help track git Work In Progress branches","archived":false,"fork":false,"pushed_at":"2026-03-26T02:59:39.000Z","size":219,"stargazers_count":337,"open_issues_count":2,"forks_count":51,"subscribers_count":11,"default_branch":"master","last_synced_at":"2026-03-26T23:54:18.753Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://www.jukie.net/~bart/blog/save-everything-with-git-wip","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bartman.png","metadata":{"files":{"readme":"README.markdown","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2009-11-04T17:51:39.000Z","updated_at":"2026-03-26T02:54:19.000Z","dependencies_parsed_at":"2025-07-20T04:31:18.006Z","dependency_job_id":"112f9217-5200-4738-9b2c-6d9d5318865a","html_url":"https://github.com/bartman/git-wip","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/bartman/git-wip","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bartman%2Fgit-wip","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bartman%2Fgit-wip/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bartman%2Fgit-wip/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bartman%2Fgit-wip/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bartman","download_url":"https://codeload.github.com/bartman/git-wip/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bartman%2Fgit-wip/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31307334,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-08T02:01:16.883Z","updated_at":"2026-04-02T13:54:24.929Z","avatar_url":"https://github.com/bartman.png","language":"C++","funding_links":[],"categories":["Shell","C++"],"sub_categories":[],"readme":"# About\n\ngit-wip is a script that will manage Work In Progress (or WIP) branches.\nWIP branches are mostly throw away but identify points of development\nbetween commits.  The intent is to tie this script into your editor so\nthat each time you save your file, the git-wip script captures that\nstate in git.  git-wip also helps you return back to a previous state of\ndevelopment.\n\nLatest git-wip can be obtained from [github.com](http://github.com/bartman/git-wip).\ngit-wip was written by [Bart Trojanowski](mailto:bart@jukie.net).\nYou can find out more from the original [blog post](http://www.jukie.net/bart/blog/save-everything-with-git-wip).\n\n# WIP branches\n\nWip branches are named after the branch that is being worked on, but are\nprefixed with 'wip/'.  For example if you are working on a branch named\n'feature' then the git-wip script will only manipulate the 'wip/feature'\nbranch.\n\nWhen you run git-wip for the first time, it will capture all changes to\ntracked files and all untracked (but not ignored) files, create a\ncommit, and make a new wip/*topic* branch point to it.\n\n    --- * --- * --- *          \u003c-- topic\n                     \\\n                      *        \u003c-- wip/topic\n\nThe next invocation of git-wip after a commit is made will continue to\nevolve the work from the last wip/*topic* point.\n\n    --- * --- * --- *          \u003c-- topic\n                     \\\n                      *\n                       \\\n                        *      \u003c-- wip/topic\n\nWhen git-wip is invoked after a commit is made, the state of the\nwip/*topic* branch will be reset back to your *topic* branch and the new\nchanges to the working tree will be caputred on a new commit.\n\n    --- * --- * --- * --- *    \u003c-- topic\n                     \\     \\\n                      *     *  \u003c-- wip/topic\n                       \\\n                        *\n\nWhile the old wip/*topic* work is no longer accessible directly, it can\nalways be recovered from git-reflog.  In the above example you could use\n`wip/topic@{1}` to access the dangling references.\n\n# git-wip command\n\nThe git-wip command can be invoked in several different ways.\n\n* `git wip`\n  \n  In this mode, git-wip will create a new commit on the wip/*topic*\n  branch (creating it if needed) as described above.\n\n* `git wip save \"description\"`\n  \n  Similar to `git wip`, but allows for a custom commit message.\n\n* `git wip log`\n  \n  Show the list of the work that leads upto the last WIP commit.  This\n  is similar to invoking:\n  \n  `git log --stat wip/$branch...$(git merge-base wip/$branch $branch)`\n\n# Installation\n\nDownload the script from the GitHub page:\n\n    git clone git://github.com/bartman/git-wip.git\n\nAdd `git-wip` to your `$PATH`:\n\n    mkdir -p ~/bin\n    cp git-wip/git-wip ~/bin/\n\n# editor hooking\n\nTo use git-wip effectively, you should tie it into your editor so you\ndon't have to remember to run git-wip manually.\n\n## vim\n\nTo add git-wip support to vim you can install the provided vim plugin.  There\nare a few ways to do this.\n\n**(1)** If you're using [Vundle](https://github.com/gmarik/Vundle.vim), you\njust need to include the following line in your `.vimrc`.\n\n    Bundle 'bartman/git-wip', {'rtp': 'vim/'}\n\n**(2)** You can slo copy the `git-wip.vim` into your vim runtime:\n\n    cp vim/plugin/git-wip ~/.vim/plugin/git-wip\n\n**(3)** Alternatively, you can add the following to your `.vimrc`.  Doing so\nwill make it be invoked after every `:w` operation.\n\n    augroup git-wip\n      autocmd!\n      autocmd BufWritePost * :silent !cd \"`dirname \"%\"`\" \u0026\u0026 git wip save \"WIP from vim\" --editor -- \"`basename \"%\"`\"\n    augroup END\n\nThe `--editor` option puts git-wip into a special mode that will make it\nmore quiet and not report errors if there were no changes made to the\nfile.\n\n## emacs\n\nTo add git-wip support to emacs add the following to your `.emacs`. Doing\nso will make it be invoked after every `save-buffer` operation.\n\n    (load \"/{path_to_git-wip}/emacs/git-wip.el\")\n\nOr you may also copy the content of git-wip.el in your `.emacs`.\n\n## sublime\n\nA sublime plugin was contributed as well.  You will find it in the `sublime`\ndirectory.\n\n# recovery\n\nShould you discover that you made some really bad changes in your code,\nfrom which you want to recover, here is what to do.\n\nFirst we need to find the commit we are interested in.  If it's the most recent\nthen it can be referenced with `wip/master` (assuming your branch is `master`),\notherwise you may need to find the one you want using:\n\n    git reflog show wip/master\n\nI personally prefer to inspect the reflog with `git log -g`, and sometimes \nwith `-p` also:\n\n    git log -g -p wip/master\n\nOnce you've picked a commit, you need to checkout the files, note that we are not\nswitching the commit that your branch points to (HEAD will continue to reference\nthe last real commit on the branch).  We are just checking out the files:\n\n    git checkout ref -- .\n\nHere `ref` could be a SHA1 or `wip/master`.  If you only want to recover one file,\nthen use it's path instead of the *dot*.\n\nThe changes will be staged in the index and checked out into the working tree, to\nreview what the differences are between the last commit, use:\n\n    git diff --cached\n\nIf you want, you can unstage all or some with `git reset`, optionally specifying a\nfilename to unstage.  You can then stage them again using `git add` or `git add -p`.\nFinally, when you're happy with the changes, commit them.\n\n\n\u003c!-- vim: set ft=markdown --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbartman%2Fgit-wip","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbartman%2Fgit-wip","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbartman%2Fgit-wip/lists"}