Official document of GCH (Git Commit Handler).
$ git clone https://github.com/Scstechr/usefultools.git ~/.useful
$ cd ~/.useful
$ pip install -r requirements.txt
$ git pull origin master
$ gch --help
Usage: gch.py [OPTIONS]
Options:
-g, --gitpath PATH Path of dir that contains `.git`. > Default: .
-f, --filepath PATH Path of staging file/diry. > Default: .
-b, --branch TEXT Commiting branch. > Default: master
-p, --push Push or not. > Default: False
-d, --detail Detailed diff. > Default: False
-l, --log Git log with option. > Default: False
-c, --commit Commit or not. > Default: False
-u, --unstage Unstage all files. > Default: False
--help Show this message and exit.
Recommended to use with alias
, such as alias gch='gch.py'
. after exporting PATH of the cloned folder.
Every command used in this script are visible as such:
>> EXECUTE: git status --short
The capability of this tag is that of git --git-dir=<path>
.
With this tag, user can specify which .git
folder to use for commit etc.
Default is set to .
, which will be selected if -g
was abridged.
$ gch
>> WARNING!: It seems path:`<PATH>` does not have `.git` folder.
Initialize? [y/N]:
If ~/.gitconfig
does exists before the execution of command, the following configuration of username
, email
, editor
, diff-tool
will start.
~/.gitconfig file does not exist. => Start Initialization!
username: Scstechr
email: teufelkonig@gmail.com
>> EXECUTE: git config --global user.name "Scstechr"
>> EXECUTE: git config --global user.email teufelkonig@gmail.com
Do you want to use emacs instead of vim as an editor? [y/N]: N
# using vimdiff as a merge tool
>> EXECUTE: git config --global merge.tool vimdiff
>> EXECUTE: cat ~/.gitconfig
[user]
name = Scstechr
email = teufelkonig@gmail.com
[merge]
tool = vimdiff
After the configuration, initialization of repository/project starts.
Title of this repository(project): test_dir
>> EXECUTE: git init
Initialized empty Git repository in /Users/moinaga/test_dir/.git/
>> EXECUTE: touch .gitignore
>> EXECUTE: touch README.md
>> EXECUTE: echo ".*" >> .gitignore
>> EXECUTE: echo "# TEST_DIR" >> README.md
>> EXECUTE: git status --short
?? README.md
>> EXECUTE: git diff --stat
** no push **
-- Main
|--.git/
|--tests/
| |--.git/
| |--.gitignore
| |--README.md
| +--test.c
|--.gitignore
|--README.md
+--main.c
If user was in ...
Main
:- If
-g
was abridged, it selectsMain/.git
as a target.git
folder.
- If
Main/tests
:- If
-g
was abridged, it selectsMain/test/.git
as a target.git
folder. - If
-g
was set to..
i.e.-g ..
, it selectsMain/.git
as a target.git
folder.
- If
If user wants to git add
only specific file, then please declare it with -f <FILE>
. Otherwise, git add .
will be executed by default.
If user wants to specify committing branch, then please declare it with -b <BRANCH>
. Otherwise, master
branch will be used.
$ git branch
* master
test
In the situation like above, where current branch was master
:
-b master
or abridging-b
does not make any change.-b test
raisesBranchIssue
with number of choices.
>> BRANCH ISSUE!
Currently on branch `master` but tried to commit to branch `test`.
1: Merge branch `master` => branch `test`
2: Stay on branch `master`
3: Checkout to branch `test`
Answer:
Ctrl-C
to abort.
Newest version now applies patch before merge, which could avoid conflict.
If there are changes to commit and you choose option (3), there will be three choices to pick next.
>> BRANCH ISSUE!
Answer: 3
Theres some changes in branch `master`.
>> EXECUTE: git diff --stat
doc/gch_doc.md | 51 ++++++++++++++++++++++++++++++++++++++++++---------
1 file changed, 42 insertions(+), 9 deletions(-)
1: Commit changes of branch `master`
2: Stash changes of branch `master`
3: Force Checkout to branch `test`
Answer:
git diff --stat
will be executed automatically.
If you pick...
- 1, 2:
commit
/stash
changes andcheckout
. - 3: Execute
git checkout -f test
, ignoring all changes.
Option for detailed git diff
.
Display git log
with some options.
git commit
with commit message.
git rm -r <PATH>
if there are any staged files.