目录
1、参数
2、别名
3、命令
一、参数
1、查看git版本
$ git --version
git version 2.15.1.windows.2
# 格式化日志输出
alias glo='git log --oneline --decorate --graph'
# 格式化高亮展示提交者等
alias gl='git log --oneline --decorate --graph --pretty="%Cgreen%cd%Creset %Cred%h%Creset %Cblue%cn%Creset %s" --date=short'
alias gcl='git clean -dfx'
alias gr='git reset --hard'
alias gb='git branch -vv --color'
alias ga='git add'
alias gs='git status'
alias gc='git checkout'
alias gcm='git commit -m'
alias gcp='git cherry-pick'
alias gf='git fetch'
alias gfo='git fetch origin'
alias gfc='git fetch critic'
alias gd='git diff --color'
alias gdc='git diff --cached --color'
alias gpl='git pull'
alias gps='git push'
alias gpo='git push origin'
alias gpc='git push critic'
启动图形化
gitk
git status命令会显示当前git仓库的状态,包括:你当前位于哪个分支,你的哪些文件有改动,以及接下来建议你做哪些操作
1、add
git add命令将文件加入到暂存区。可以先理解为,git add之后,就将该文件加入了提交列表
git add *
2、pull
git pull <远程库名> <远程分支名>:<本地分支名>
-- 取回远程库中的fluctuation分支,与本地的fluctuation分支进行merge,要写成:
git pull origin fluctuation:fluctuation
3、clean
Git的2.11和更新
git clean -d -f .
git clean -f '/path/to/file/'
较老的git
git clean -d -f ""
参数:
-x意味着忽略的文件也将被删除的文件以及未知的饭桶。
-d手段删除除未跟踪文件未跟踪目录。
-f来强制其运行。
4、fetch
git fetch --all
git reset commit_id/HEAD@{27}:撤销时不对代码修改进行撤销,可以直接通过git commit 重新提交对本地代码的修改
git reset --soft :此次提交之后的修改会被退回到暂存区。
git reset --hard commit_id/HEAD@{27}:此次提交之后的修改不做任何保留
git push命令用来进行一次提交
git push --set-upstream origin tb/ADX-1024/1
删除远程分支,演示见这里
git push origin --delete <分支名> # 前面加--delete与加: 含义一样
git push origin :<分支名>
强制推送分支,演示见这里
git push -f # 强制推送当前分支
git push origin +<分支名> # 强制推送某分支
git log 命令用于查看提交历史
git log -p -- 文件:查看文件历史记录
参数
--author="Jichao Liu" 指定作者
--grep='所需要查找的字符' ,只能搜索comment字符
查看提交记录
git blame 文件名:查看文件的全部提交记录
git blame -L 开始行号,结束行好 文件名:查看文件指定范围的提交记录(和下面这命令等价)
git blame -L 开始行号,+长度 Ref.java :查看文件指定范围的提交记录
9、stash
保存和恢复进度
10、diff
解释:对比文件差异
示例:对比两commitid的差异并排除某类文件(参考这里)
git diff f97ecc8 5687e97 -- ':!*.json'
11、difftool
命令:
git checkout 参数 分支名
git checkout ${commit} /path/to/file
解释:用于查看、创建、切分分支
参数:
-f:用于解决 (Please move or remove them before you switch branches)等异常
-b:用于创建分支
示例
创建、切换分支
# 切换到master分支
git checkout -f master// tb/ADX-1015/1不存在,则创建
git checkout -b tb/ADX-1015/1
某文件还原到到指定commit时的状态(操作后即是不同分支,也会还原这个commit状态)
将doc/sql/ad_bi.sql还原到3fec326b时的状态(查看有哪些commitid)
git checkout 3fec326b doc/sql/ad_bi.sql
1)命令:
git rebase -i commitid
git rebase -i commitid ~ 数字
git rebase -i commitid[^]*
git rebase -i HEAD[^]*
git rebase -i HEAD ~ 数字
2)参数:
-i:表示进入交互模式
--edit-todo:
--continue:
--onto <revision> rebase onto given branch instead of upstream
--no-verify allow pre-rebase hook to run
-q, --quiet be quiet. implies --no-stat
-v, --verbose display a diffstat of what changed upstream
-n, --no-stat do not show diffstat of what changed upstream
--signoff add a Signed-off-by: line to each commit
--ignore-whitespace passed to 'git am'
--committer-date-is-author-date
passed to 'git am'
--ignore-date passed to 'git am'
-C <n> passed to 'git apply'
--whitespace <action>
passed to 'git apply'
-f, --force-rebase cherry-pick all commits, even if unchanged
--no-ff cherry-pick all commits, even if unchanged
--continue continue
--skip skip current patch and continue
--abort abort and check out the original branch
--quit abort but keep HEAD where it is
--edit-todo edit the todo list during an interactive rebase
--show-current-patch show the patch file being applied or merged
-m, --merge use merging strategies to rebase
-i, --interactive let the user edit the list of commits to rebase
-p, --preserve-merges
try to recreate merges instead of ignoring them
--rerere-autoupdate allow rerere to update index with resolved conflict
-k, --keep-empty preserve empty commits during rebase
--autosquash move commits that begin with squash!/fixup! under -i
-S, --gpg-sign[=<key-id>]
GPG-sign commits
--autostash automatically stash/stash pop before and after
-x, --exec <exec> add exec lines after each commit of the editable list
--allow-empty-message
allow rebasing commits with empty messages
-r, --rebase-merges[=<mode>]
try to rebase merges instead of skipping them
--fork-point use 'merge-base --fork-point' to refine upstream
-s, --strategy <strategy>
use the given merge strategy
-X, --strategy-option <option>
pass the argument through to the merge strategy
--root rebase all reachable commits up to the root(s)
--reschedule-failed-exec
automatically re-schedule any `exec` that fails
3)说明:可以对某一段线性提交历史进行编辑、删除、复制、粘贴、合并,可以用commitid ~ n或commitid^^这种形式:前者表示当前提交到n次以前的提交,后者^符号越多表示的范围越大,commit可以是HEAD或者某次提交的hash值;
注意:
a、变基命令打开的文本编辑器中的commit顺序跟git log查看的顺序是相反的,也就是最近的提交在下面,老旧的提交在上面
b、变基命令其实可以同时对多个提交进行修改,只需要修改将对应行前的pick都修改为edit,保存退出后会根据你修改的数目多次打开修改某次commit的文本编辑器界面。但是这个范围内的最终祖先commit不能修改,也就是如果有5行commit信息,你只能修改下面4行的,这不仅限于commit修改,重排、删除以及合并都如此。
4)示例:
git rebase -i 72d1bc32
13、branch
删除本地分支
git branch -D 分支
示例如下
删除远程分支,见push
14、grep
命令
git grep -n "Content" :搜索当前目录下所有文件是否包含指定内容
git grep -n "Content" fileName:搜索指定文件是否包含指定内容
git grep --count "Content" fileName:搜索指定内容在指定文件中出现了几次
git grep -e "正则1" --or -e "正则2":从当前目录下检索符合正则1的或者符合正则2的
git grep -e "正则1" --and -e "正则2":从当前目录下检索符合正则1且符合正则2的
git grep -e "正则1" --and \( -e "正则2" --or -e "正则3" \):从当前目录下检索 “符合正则1且符合正则2的” 或者 “符合正则1且符合正则3的”
git grep -e "正则1" --and \( -e "正则2" --or --not -e "正则3" \):从当前目录下检索 “符合正则1且符合正则2的” 或者 “符合正则1且不符合正则3的”
git grep -e "正则1" --and -e "正则2" HEAD~:搜索HEAD~版本中的当前目录下符合正则1且符合正则2的
统计每个人提交次数
git shortlog -sn
git ls-files --error-unmatch .gitignore
合并tb/ADX-1981/1分支到master
先切换到master分支(git checkout master)
再执行git merge tb/ADX-1981/1
18、commit
修改commit的描述内容
git commit --amend
19、cherry-pick
命令
git cherry-pick commitid
示例
[/Workspace/adx]$ git cherry-pick 7ad7233a2 *[tb/ADX-3518/2]
[tb/ADX-3518/2 53b7ae0a7] ADX-3518:urvey/polls/leads data table
Date: Wed Mar 11 16:08:20 2020 +0800
3 files changed, 108 insertions(+), 5 deletions(-)
20、update-index
命令
git update-index --assume-unchanged /path/to/file #忽略跟踪
git update-index --no-assume-unchanged /path/to/file #恢复跟踪
示例
21、rm
命令
git rm
说明
用git rm删除文件,同时还会将这个删除操作记录下来;用rm删除文件,删除的仅仅是本地物理文件,没有将其从 git的记录中剔除。git add 和 git rm 有相似的功能,但git add仅能记录添加、改动的动作,删除的动作需靠git rm 来完成。
22、show
注意:本文归作者所有,未经作者允许,不得转载