diff --git a/.github/.ignore_words b/.github/.ignore_words index 8aad33d..35d9297 100644 --- a/.github/.ignore_words +++ b/.github/.ignore_words @@ -1 +1,2 @@ gool +Cant diff --git a/Commands.md b/Commands.md index 1085ba7..fa59614 100644 --- a/Commands.md +++ b/Commands.md @@ -75,6 +75,8 @@ - [`git undo`](#git-undo) - [`git unlock`](#git-unlock) - [`git utimes`](#git-utimes) + - [`git unwip`](#git-unwip) + - [`git wip`](#git-wip) ## git extras @@ -1637,3 +1639,21 @@ Commits changes with a generated message. ## git continue Continue current revert, rebase, merge or cherry-pick, without the need to find exact command in history. + +## git wip + +Create a Work In Progress(WIP) commit, which will include all changes in the +working directory. (i.e., changes to existing files, new files, removed files) + +```bash +$ git wip +``` + +## git unwip + +Undo a Work In Progress(WIP) commit and put all of those changes back into the +working directory. + +```bash +$ git unwip +``` diff --git a/bin/git-unwip b/bin/git-unwip new file mode 100755 index 0000000..4e772b0 --- /dev/null +++ b/bin/git-unwip @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +# Based on scripts from git-utils: +# * https://github.com/ddollar/git-utils/blob/master/git-unwip + +# Check if the last commit is a 'WIP' commit +LAST_COMMIT=`git log -1 --pretty=%B | tr -d '[:space:]'` + +if [ 'WIP' != $LAST_COMMIT ]; then + echo 'Last commit is not a WIP commit, so it will not be unWIP-ed.' + exit 1 +fi + +git undo --soft diff --git a/bin/git-wip b/bin/git-wip new file mode 100755 index 0000000..a25d68f --- /dev/null +++ b/bin/git-wip @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +# Based on scripts from git-utils: +# * https://github.com/ddollar/git-utils/blob/master/git-wip +# * https://github.com/ddollar/git-utils/blob/master/git-addremove + +git add --all +git commit --all --message="WIP" diff --git a/etc/git-extras-completion.zsh b/etc/git-extras-completion.zsh index cbe72e1..13957f0 100644 --- a/etc/git-extras-completion.zsh +++ b/etc/git-extras-completion.zsh @@ -464,4 +464,6 @@ zstyle ':completion:*:*:git:*' user-commands $existing_user_commands \ touch:'touch and add file to the index' \ undo:'remove latest commits' \ unlock:'unlock a file excluded from version control' \ - utimes:'change files modification time to their last commit date' + utimes:'change files modification time to their last commit date' \ + unwip:'undo a WIP commit' \ + wip:'create a WIP commit' diff --git a/man/git-extras.1 b/man/git-extras.1 index 8f09cbf..cba16e0 100644 --- a/man/git-extras.1 +++ b/man/git-extras.1 @@ -1,6 +1,6 @@ -.\" generated with Ronn-NG/v0.9.1 -.\" http://github.com/apjanke/ronn-ng/tree/0.9.1 -.TH "GIT\-EXTRAS" "1" "September 2024" "" "Git Extras" +.\" generated with Ronn-NG/v0.10.1 +.\" http://github.com/apjanke/ronn-ng/tree/0.10.1 +.TH "GIT\-EXTRAS" "1" "May 2025" "" "Git Extras" .SH "NAME" \fBgit\-extras\fR \- Awesome GIT utilities .SH "SYNOPSIS" @@ -22,154 +22,158 @@ Self update\. .P Change the default branch to \fB$BRANCH\fR\. If \fBgit\-extras\.default\-branch\fR isn't set, \fBinit\.defaultBranch\fR is used instead\. If none of them are set it defaults to \fBmain\fR\. .SH "COMMANDS" -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-abort(1)\fR Abort current git operation -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-alias(1)\fR Define, search and show aliases -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-archive\-file(1)\fR Export the current HEAD of the git repository to an archive -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-authors(1)\fR Generate authors report -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-browse\-ci(1)\fR \fIView the web page for the current repository\fR -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-browse(1)\fR \fIView the web page for the current repository\fR -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-brv(1)\fR List branches sorted by their last commit date -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-bulk(1)\fR Run git commands on multiple repositories -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-changelog(1)\fR Generate a changelog report -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-clear\-soft(1)\fR Soft clean up a repository -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-clear(1)\fR Rigorously clean up a repository -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-coauthor(1)\fR Add a co\-author to the last commit -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-commits\-since(1)\fR Show commit logs since some date -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-continue(1)\fR Continue current git operation -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-contrib(1)\fR Show user's contributions -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-count(1)\fR Show commit count -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-cp(1)\fR Copy a file keeping its history -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-create\-branch(1)\fR Create branches -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-delete\-branch(1)\fR Delete branches -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-delete\-merged\-branches(1)\fR Delete merged branches -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-delete\-squashed\-branches(1)\fR Delete branches that were squashed -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-delete\-submodule(1)\fR Delete submodules -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-delete\-tag(1)\fR Delete tags -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-delta(1)\fR Lists changed files -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-effort(1)\fR Show effort statistics on file(s) -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-feature(1)\fR Create/Merge feature branch -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-force\-clone(1)\fR overwrite local repositories with clone -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-fork(1)\fR Fork a repo on github -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-fresh\-branch(1)\fR Create fresh branches -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-get(1)\fR Clone a Git repository under a configured directory -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-gh\-pages(1)\fR Create the GitHub Pages branch -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-graft(1)\fR Merge and destroy a given branch -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-guilt(1)\fR calculate change between two revisions -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-ignore\-io(1)\fR Get sample gitignore file -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-ignore(1)\fR Add \.gitignore patterns -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-info(1)\fR Returns information on current repository -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-local\-commits(1)\fR List local commits -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-lock(1)\fR Lock a file excluded from version control -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-locked(1)\fR ls files that have been locked -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-magic(1)\fR Automate add/commit/push routines -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-merge\-into(1)\fR Merge one branch into another -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-merge\-repo(1)\fR Merge two repo histories -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-missing(1)\fR Show commits missing from another branch -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-mr(1)\fR Checks out a merge request locally -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-obliterate(1)\fR rewrite past commits to remove some files -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-paste(1)\fR Send patches to pastebin for chat conversations -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-pr(1)\fR Checks out a pull request locally -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-psykorebase(1)\fR Rebase a branch with a merge commit -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-pull\-request(1)\fR Create pull request for GitHub project -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-reauthor(1)\fR Rewrite history to change author's identity -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-rebase\-patch(1)\fR Rebases a patch -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-release(1)\fR Commit, tag and push changes to the repository -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-rename\-branch(1)\fR rename local branch and push to remote -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-rename\-file(1)\fR Rename a file or directory and ensure Git recognizes the change, regardless of filesystem case\-sensitivity\. -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-rename\-remote(1)\fR Rename a remote -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-rename\-tag(1)\fR Rename a tag -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-repl(1)\fR git read\-eval\-print\-loop -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-reset\-file(1)\fR Reset one file -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-root(1)\fR show path of root -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-scp(1)\fR Copy files to SSH compatible \fBgit\-remote\fR -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-sed(1)\fR replace patterns in git\-controlled files -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-setup(1)\fR Set up a git repository -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-show\-merged\-branches(1)\fR Show merged branches -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-show\-tree(1)\fR show branch tree of commit history -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-show\-unmerged\-branches(1)\fR Show unmerged branches -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-squash(1)\fR squash N last changes up to a ref'ed commit -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-stamp(1)\fR Stamp the last commit message -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-standup(1)\fR Recall the commit history -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-summary(1)\fR Show repository summary -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-sync(1)\fR Sync local branch with remote branch -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-touch(1)\fR Touch and add file to the index -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-undo(1)\fR Remove latest commits -.IP "\[ci]" 4 +.IP "\(bu" 4 \fBgit\-unlock(1)\fR Unlock a file excluded from version control -.IP "\[ci]" 4 +.IP "\(bu" 4 +\fBgit\-unwip(1)\fR Undo a Work In Progress commit +.IP "\(bu" 4 \fBgit\-utimes(1)\fR Change files modification time to their last commit date +.IP "\(bu" 4 +\fBgit\-wip(1)\fR Create a Work In Progress commit .IP "" 0 .SH "AUTHOR" Written by Tj Holowaychuk <\fItj@vision\-media\.ca\fR> diff --git a/man/git-extras.html b/man/git-extras.html index 36448ef..1688eaf 100644 --- a/man/git-extras.html +++ b/man/git-extras.html @@ -1,8 +1,8 @@ - - + + git-extras(1) - Awesome GIT utilities + + + +
+ + + +
    +
  1. git-unwip(1)
  2. +
  3. Git Extras
  4. +
  5. git-unwip(1)
  6. +
+ + + +

NAME

+

+ git-unwip - Undo a Work In Progress commit +

+

SYNOPSIS

+ +

git-unwip

+ +

DESCRIPTION

+ +

Undo a Work In Progress commit.

+ +

OPTIONS

+ +

None

+ +

EXAMPLES

+ +

Create a WIP commit which stores all changes in the working directory.

+ +
$ git wip
+
+ +

Later on, undo the commit and continue making changes.

+ +
$ git unwip
+
+ +

AUTHOR

+ +

Written by Andrew Sullivan Cant <mail@andrewsullivancant.ca>

+ +

REPORTING BUGS

+ +

<https://github.com/tj/git-extras/issues>

+ +

SEE ALSO

+ +

<https://github.com/tj/git-extras>

+ +
    +
  1. +
  2. May 2025
  3. +
  4. git-unwip(1)
  5. +
+ +
+ + diff --git a/man/git-unwip.md b/man/git-unwip.md new file mode 100644 index 0000000..6d4d961 --- /dev/null +++ b/man/git-unwip.md @@ -0,0 +1,36 @@ +git-unwip(1) -- Undo a Work In Progress commit +================================ + +## SYNOPSIS + +`git-unwip` + +## DESCRIPTION + + Undo a Work In Progress commit. + +## OPTIONS + + None + +## EXAMPLES + + Create a WIP commit which stores all changes in the working directory. + + $ git wip + + Later on, undo the commit and continue making changes. + + $ git unwip + +## AUTHOR + +Written by Andrew Sullivan Cant <> + +## REPORTING BUGS + +<> + +## SEE ALSO + +<> diff --git a/man/git-wip.1 b/man/git-wip.1 new file mode 100644 index 0000000..3d1e326 --- /dev/null +++ b/man/git-wip.1 @@ -0,0 +1,31 @@ +.\" generated with Ronn-NG/v0.10.1 +.\" http://github.com/apjanke/ronn-ng/tree/0.10.1 +.TH "GIT\-WIP" "1" "May 2025" "" "Git Extras" +.SH "NAME" +\fBgit\-wip\fR \- Create a Work In Progress commit +.SH "SYNOPSIS" +\fBgit\-wip\fR +.SH "DESCRIPTION" +Create a Work In Progress commit, include all files in the working directory\. +.SH "OPTIONS" +None +.SH "EXAMPLES" +Create a WIP commit which stores all changes in the working directory\. +.IP "" 4 +.nf +$ git wip +.fi +.IP "" 0 +.P +Later on, undo the commit and continue making changes\. +.IP "" 4 +.nf +$ git unwip +.fi +.IP "" 0 +.SH "AUTHOR" +Written by Andrew Sullivan Cant <\fImail@andrewsullivancant\.ca\fR> +.SH "REPORTING BUGS" +<\fIhttps://github\.com/tj/git\-extras/issues\fR> +.SH "SEE ALSO" +<\fIhttps://github\.com/tj/git\-extras\fR> diff --git a/man/git-wip.html b/man/git-wip.html new file mode 100644 index 0000000..b640255 --- /dev/null +++ b/man/git-wip.html @@ -0,0 +1,122 @@ + + + + + + git-wip(1) - Create a Work In Progress commit + + + + +
+ + + +
    +
  1. git-wip(1)
  2. +
  3. Git Extras
  4. +
  5. git-wip(1)
  6. +
+ + + +

NAME

+

+ git-wip - Create a Work In Progress commit +

+

SYNOPSIS

+ +

git-wip

+ +

DESCRIPTION

+ +

Create a Work In Progress commit, include all files in the working directory.

+ +

OPTIONS

+ +

None

+ +

EXAMPLES

+ +

Create a WIP commit which stores all changes in the working directory.

+ +
$ git wip
+
+ +

Later on, undo the commit and continue making changes.

+ +
$ git unwip
+
+ +

AUTHOR

+ +

Written by Andrew Sullivan Cant <mail@andrewsullivancant.ca>

+ +

REPORTING BUGS

+ +

<https://github.com/tj/git-extras/issues>

+ +

SEE ALSO

+ +

<https://github.com/tj/git-extras>

+ +
    +
  1. +
  2. May 2025
  3. +
  4. git-wip(1)
  5. +
+ +
+ + diff --git a/man/git-wip.md b/man/git-wip.md new file mode 100644 index 0000000..58bc19b --- /dev/null +++ b/man/git-wip.md @@ -0,0 +1,36 @@ +git-wip(1) -- Create a Work In Progress commit +================================ + +## SYNOPSIS + +`git-wip` + +## DESCRIPTION + + Create a Work In Progress commit, include all files in the working directory. + +## OPTIONS + + None + +## EXAMPLES + + Create a WIP commit which stores all changes in the working directory. + + $ git wip + + Later on, undo the commit and continue making changes. + + $ git unwip + +## AUTHOR + +Written by Andrew Sullivan Cant <> + +## REPORTING BUGS + +<> + +## SEE ALSO + +<> diff --git a/man/index.txt b/man/index.txt index 5e98b17..4f24ad0 100644 --- a/man/index.txt +++ b/man/index.txt @@ -73,4 +73,6 @@ git-sync(1) git-sync git-touch(1) git-touch git-undo(1) git-undo git-unlock(1) git-unlock +git-unwip(1) git-unwip git-utimes(1) git-utimes +git-wip(1) git-wip diff --git a/tests/poetry.lock b/tests/poetry.lock index bb52a52..cef29c8 100644 --- a/tests/poetry.lock +++ b/tests/poetry.lock @@ -1,19 +1,21 @@ -# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "codespell" -version = "2.2.0" -description = "Codespell" +version = "2.4.0" +description = "Fix common misspellings in text files" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "codespell-2.2.0-py3-none-any.whl", hash = "sha256:3cc3fcb484a8302683add19e7d11504c79c79b10d4ea0675409417a044b27374"}, - {file = "codespell-2.2.0.tar.gz", hash = "sha256:3dce0cd1348d277f8d934d1d4dcbbf510f9ddfd1b9005e9b25fb983189962561"}, + {file = "codespell-2.4.0-py3-none-any.whl", hash = "sha256:b4c5b779f747dd481587aeecb5773301183f52b94b96ed51a28126d0482eec1d"}, + {file = "codespell-2.4.0.tar.gz", hash = "sha256:587d45b14707fb8ce51339ba4cce50ae0e98ce228ef61f3c5e160e34f681be58"}, ] [package.extras] -dev = ["check-manifest", "flake8", "pytest", "pytest-cov", "pytest-dependency"] +dev = ["Pygments", "build", "chardet", "pre-commit", "pytest", "pytest-cov", "pytest-dependency", "ruff", "tomli", "twine"] hard-encoding-detection = ["chardet"] +toml = ["tomli"] +types = ["chardet (>=5.1.0)", "mypy", "pytest", "pytest-cov", "pytest-dependency"] [[package]] name = "colorama" @@ -143,4 +145,4 @@ test = ["pytest"] [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "e730a1e6e7fd2f51858e8c8cfa8b56d606eadd7a0a629ca8af078904721a5159" +content-hash = "fcf0ba3dd6655735da5c1e21ba32b94011d32bc5a30fbdaf31146d3820c1442a" diff --git a/tests/pyproject.toml b/tests/pyproject.toml index f04e61d..3d017cb 100644 --- a/tests/pyproject.toml +++ b/tests/pyproject.toml @@ -16,7 +16,7 @@ gitpython = "3.1.43" testpath = "0.6.0" [tool.poetry.group.dev.dependencies] -codespell = "2.2" +codespell = "2.4" [tool.pytest.ini_options] minversion = "7.4"