一、概述
git常用命令整理, git book
#查看指定命令用法(控制台说明)
git branch -h
#查看指定命名详细信息(本地文档)
git branch --help
#查看当前git仓库配置信息
cat .git/config
#打开本地gui工具
gitk
代理配置
方式一、系统代理配置
注意:vpn客户端需要运行接入局域网内才行,配置代理后使用curl会跳转,所以使用curl下载参数应为curl -JLO <fileUrl>
#配置文件任选其一设置即可,作用域大到小(/etc/profile > /etc/bash.bashrc > ~/.bashrc)
vi /etc/profile
#追加以下一种代理即可
export http_proxy=http://<proxy_ip>:port
export https_proxy=http://<proxy_ip>:port
#export http_proxy=socks5://<proxy_ip>:port
#export https_proxy=socks5://<proxy_ip>:port
#配置所有协议的代理
#export ALL_PROXY=socks5://<proxy_ip>:port
#不需要代理的内容
#export no_proxy=192.168.1.0/16,localhost,
#刷新配置
source /etc/profile
#curl下载文件,命令行添加代理地址
curl --proxy=http://<proxy_ip>:port -JLO <url>
方式二、git代理配置
#http和socks5任选其一即可
# http
git config --global http.proxy http://<proxy_ip>:port
git config --global https.proxy http://<proxy_ip>:port
# socks5
git config --global http.proxy socks5://<proxy_ip>:port
git config --global https.proxy socks5://<proxy_ip>:port
#取消
git config --global --unset http.proxy
git config --global --unset https.proxy
#git 命令行添加临时代理
#git clone <url> --config https.proxy=http://<proxy_ip>:port
git clone <url> -c https.proxy=http://<proxy_ip>:port
二、仓库
初始化后的仓库默认会创建origin
远端仓库,所有命令在不指明远端仓库时默认指向origin
1、仓库基础命令
#初始化本地仓库
git init
#克隆仓库
git clone <url>
多模块加载
#方式一
git clone <url> --recrusive
#git clone <url> --recurse-submodules
子模块的.git中的路径是绝对路径,本地工程拷到其他路径,子模块将无法切分支
#方式二
git clone <url>
cd <项目>
git submodule update --init --recursive
子模块的.git中的路径是相对路径
2、仓库管理命令
#查看远端仓库地址
git remote -v
#查看指定远端仓库地址
git remote show origin
#git remote get-url origin
#git remote get-url --push origin
#修改远程对象拉取地址
git remote set-url origin <new url>
#修改远程对象推送地址
git remote set-url --push origin <new url>
#添加远端对象
git remote add <name> <url>
#删除远端对象
git remote rm <name>
3、配置忽略文件
vi .gitignore
*.a #忽略.a类型的文件
!lib.a #仍然跟踪lib.a文件
/TODO #只忽略当前目录下的TODO文件,而不忽略子目录下的TODO文件
build/ #忽略build目录下的所有文件
doc/*.txt #忽略doc目录下的.txt文件,而不忽略doc子目录下的.txt文件
doc/**/*.pdf #忽略doc目录下的所有.pdf文件
#忽略已上传的文件或删除已上传文件
#a、配置.gitignore
#b、标记移除
git rm --cache <file name>
#git rm -r --cache <folder name>
#c、推送移除
git push
4、文件管理命令
#移除文件,取消跟踪并删除本地文件
git rm <fileName>
#移除文件,取消跟踪但不删除本地文件
git rm --cached <fileName>
#支持glob模式,移除log文件夹下的所有.log文件
git rm log/\*.log
三、工作目录
1、创建工作目录
git init
或git clone
会创建一个默认的工作区,适用于当前分支正在运行测试且切换分支成本较大的场景(可以简单理解为在不同的文件分别clone,但是worktree 只维护一个repo)
#git worktree add <路径> [<提交号/分支名称>]
#如果没有分支名称新建工作区会迁出和路径最后一个组成部分一样名称的分支,如下会自动迁出dev1分支
git worktree add ../Project1/dev1
#项目结构大致如下
#├─ Project1
#│ └── Project1
#│ └── master
#│ └── dev1
2、删除工作目录
如果没有使用 git worktree remove
删除工作区,那么它的相关管理文件,即驻扎在仓库中的文件,最终会被自动删除,或者可以在工作区中运行git worktree prune
来清理任何过时的管理文件
#会删除工作区文件夹
#git worktree remove <workName>
git worktree remove dev1
四、分支
1、创建分支
#创建分支
git branch <分支名称>
#创建并迁出分支
git checkout -b <分支名称>
#根据标签或提交创建并迁出分支
git branch <分支名称> <tag|commitId>
git checkout -b <分支名称> <tag|commitId>
#新分支同步云端
#git push origin <分支名称>:<分支名称>
git push
2、切换分支
#迁出分支
git checkout <分支名称>
3、删除分支
#删除本地分支 -D是强制删除
git branch -d <分支名称>
#删除云端分支
git push origin -d <分支名称>
#修剪云端分支
git remote prune origin
4、合并分支
#根据情况考虑是否在合并前进行基变(git rebase)操作
#将待合并分支合并至当前分支 --no-ff 禁止快进式合并(不包含待合并分支log,会创建一个新的提交)
#将当前分支提交内容推送至云端
git push
#方式一
#切换目标分支
git checkout <目标分支>
#将待合并内容合并至目标分支
git merge <待合并分支>
#推送合并内容
git push
#方式二
#不切换分支进行合并,通fetch拉取云端分支内容到本地分支内容上,进行分支合并
git fetch origin <待合并分支(云端分支)>:<目标分支(本地分支)>
#推送合并内容
git push origin <目标分支>
#挑拣合并,仅在方式一的基础上可以通过日志来挑选合并内容
git cherry-pick <commitId>
5、刷新云端分支
#加载云端新增分支
git remote update
#修剪云端分支
git remote prune origin
五、标签
1、标签基本命令
#查看标签
git tag
git show <tag>
#检索标签
git tag -l "v1.5*"
#创建标签
git tag <tag>
git tag <tag> -m "描述信息"
#补充标签,添加对应的commitId参数
git tag <tag> <commitId>
git tag <tag> <commitId> -m "描述信息"
2、共享标签
#共享标签
#推送指定标签
git push <tag>
#推送所有标签
git push --tags
六、工作
1、查看
#查看当前文件状态
git status
git status -s
git status -u
#HEAD顺序的提交列表
git reflog
#查看提交日志 -p指定条数,stat显示简要统计
git log -p -2 --stat
git log --pretty=format:"%h %s" --graph
git log --pretty=oneline --graph
git log --pretty=oneline --grep=<搜索内容>
#查看本地最近一次提交
git show
#查看指定文件
git log <fileName>
#可以显示每次提交的diff
git log -p <filenam>
#只看某次提交中的某个文件变化
git log <commitId> <filenam>
2、比较
diff
可以替换为difftool
通过工具查看比较内容
#工作目录与最后一次commit比较
git diff
#暂存区与最后一次commit比较
#git diff –staged
git diff –cached
#工作目录和暂存区与最后一次commit之间的的所有不相同文件的增删改
git diff HEAD
git diff HEAD <fileName>
#分支比较
git diff <分支1> <分支2>
3、拉取
git push
#取消工作区修改,删除所有修改内容
git checkout .
git checkout <fileName>
4、暂存
#暂存
git add .
git add <fileName>
#取消暂存
git reset .
git reset -- <fileName>
5、提交
#提交暂存区内容
git commit -m "提交描述"
#*重新提交暂存区,不重写描述信息,追加修改内容至未推送的提交中
git commit --amend --no-edit
#*重新提交暂存区,重写描述信息
git commit --amend -m "提交描述"
#跳过暂存区直接提交
git commit -a -m "提交描述"
#取消提交,如果是已经同步云端的提交可以在本地回退后进行强制推送覆盖
#取消最近一次提交及暂存区,保留代码。^表示后退一步
#git reset HEAD~[后退的步数]
git reset HEAD^
#取消最近一次提交保留暂存区,保留代码
git reset --soft HEAD^
#取消提交,并删除代码
git reset --hard HEAD^
#HEAD切换到指定commit
git reset <commitID>
6、推送
#推送
git push
#强制推送
git push --force
7、存储
#默认存储暂存区的内容
git stash -m "存储描述信息"
#存储暂存区以及工作区的内容
git stash -u -m "存储描述信息"
#查看当前存储列表
git stash list
#恢复存储并删除存储信息
git stash pop
git stash pop stash@{<index>}
#仅恢复存储
git stash apply <stash@{<index>}>
#删除指定存储
git stash drop stash@{<index>}
#删除所有存储
git stash clear
#将存储内容迁出新的分支
git stash branch <name> <stash@{<index>}>
七、命令别名
#查看所有别名
git config --list|grep alias.*
#设置别名
git config --global alias.<别名> "<命令>"
#日志命令别名
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
#使用
git lg
#删除别名
#git config --global --unset alias.<别名>
git config --global --unset alias.lg
Comments NOTHING