Git 命令汇总
1)文件目录操作
Git 文件目录操作命令,跟linux相同,比如
pwd:输出当前绝对路径
cd:进入目录
ls:列出目录和文件,一般用“ls -l”或“ls -al”
vim/vi:编辑文本文件。
i 开始编辑,esc 退出编辑
Ctrl+U/D 上下翻页,G 跳到尾部,nG 跳到第n行,:set nu 显示行号
按esc后(只读模式)::q 关闭文件,:wq 保存修改后关闭文件,:q! 不保存强制退出
cp:复制文件
mv:移动(重命名)文件
rm:删除。 rm -f test1.txt 删除文件,rm -rf folder1 删除目录
mkdir:创建目录。mkdir folder1 创建目录,mkdir -p folder2/folder3 创建目录(自动创建父目录)
touch:创建文件。touch test1.txt 创建文本文件
2)检入检出相关
$ git init /c/git1/demo1 # 创建本地库demo1(或进入到demo1目录后再输入 git init)
$ git clone [git-url] # 克隆/下载 远程库到本地
$ git clone [git-url] localrepository1 # 克隆远程仓库到本地并且 重命名本地仓库 为“localrepository1”
$ git status # 只显示未提交的文件(增/改/删 的文件,都会列出来)
$ git config --list # 显示当前仓库的配置信息(仓库地址/仓库分支信息/帐号密码等)
$ git config -e --global # 编辑配置文件,vi/vim 模式,输入 i 开始编辑
$ git config --global user.name "xiaoluo" # 直接编辑配置文件某个属性的值,name/email/username/password
$ git add test1.txt test2.ini test3.pdf # 添加指定文件,可以列出多个文件
$ git add testfolder1 # 添加指定目录的文件(包括子目录和文件)
$ git add . # 带小数点,添加当前目录下的所有文件(包括子目录和文件)
$ git rm [file1] [file2] ... # 删除工作区文件,并且Add到暂存区
$ git rm --cached [file] # 取消删除,保留工作区的文件
$ git mv [file-old] [file-new] # 改名文件,并且Add到暂存区
$ git checkout -b branchA # 新建本地分支branchA,并切换到该分支
$ git checkout branchA # 切换到branchA分支
$ git checkout - # 切换到上一个分支
$ git checkout [file] # 恢复暂存区的指定文件到工作区
$ git checkout [commitID] [file] # 恢复某个commit的指定文件到暂存区和工作区
$ git checkout . # 恢复暂存区的所有文件到工作区
$ git remote –v # 显示所有远程仓库及其地址,并括号标明权限(fetch/push),等同于“git remote --verbose”
$ git pull # 拉取 远程同名分支 的变更,并合并到当前分支 (等同于:git fetch + git merge )
$ git pull origin dev1 # 将远程origin主干的dev1分支,合并到本地当前分支
(上面这句等同于:$ git fetch origin 接着 $ git merge origin/dev1)
$ git pull origin develop:dev3 # 将远程origin主干的develop分支,合并到本地dev3分支
$ git push --force # 强行推送当前分支到远程仓库,直接覆盖远程分支,丢弃远程分支的新变更
$ git push origin test:master # 推送本地test分支 作为 远程的master分支
$ git push origin test:test # 推送本地test分支作为远程的test分支
$ git push origin :test # 删除远程的test分支,但保留本地的test分支
$ git push origin --delete branchR1 # 删除远程分支branchR1
3)分支操作
$ git branch # 列出所有本地分支
$ git branch -r # 列出所有 已拉取的远程分支(未拉取下来的分支,不会显示出来)
$ git branch -a # 列出所有 本地分支 和 已拉取的远程分支(假如远程分支有变更,这个命令不会显示出来的)
$ git branch -v # 查看 本地所有分支的最新提交的信息
$ git branch test1 # 新建test1分支,但依然停留在当前分支
$ git branch test1 69cba87 # 新建test1分支,指向 commit ID 为“69cba87”的节点
$ git branch --track localbrA remoteBrK # 新建分支localbrA,与远程分支remoteBrK建立追踪关系
$ git branch --set-upstream localbrA remoteBrK # 在已有的本地分支localbrA和远程分支remoteBrK之间建立追踪关系
$ git branch -d branch1 # 删除本地分支branch1(该分支已合并或无修改)
$ git branch -D branch2 # 强制删除本地分支branch2(不管该分支是否有变更)
$ git branch -dr origin/develop # 删除远程origin主干下的develop分支,本地分支不会删除
$ git branch --merge # 列出已合并的分支
$ git branch --no-merge # 列出未合并的分支
$ git merge branch1 # 将branch1分支合并到当前分支
$ git cherry-pick [commit] # 选择一个commit,合并进当前分支
4)日志历史
$ git status # 显示有变更的文件
$ git log # 显示当前分支的版本历史
$ git log –-stat # 显示commit历史,以及每次commit发生变更的文件
$ git log -S [keyword] # 搜索提交历史,根据关键词
$ git log [tag] HEAD --pretty=format:%s # 显示某个commit之后的所有变动,每个commit占据一行
$ git log [tag] HEAD --grep feature # 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
$ git log --follow [file] # 显示某个文件的版本历史,包括文件改名
$ git whatchanged [file] # 显示某个文件的版本历史,包括文件改名
$ git log -p [file] # 显示指定文件相关的每一次diff
$ git log --pretty=oneline # 显示所有提交历史,只单行显示commitID和comment
$ git log -5 --pretty --oneline # 显示过去5次提交 (oneline前用=号显示整个commitID ,用--显示7位数)
$ git shortlog -sn # 显示所有提交过的用户,按提交次数排序
$ git blame [file] # 显示指定文件是什么人在什么时间修改过(自动打开该文件,具体列出每一行的修改)
$ git reflog # 显示本地所有分支的操作历史
5)差异比较
$ git diff # 显示暂存区和工作区的代码差异
$ git diff HEAD # 显示工作区与当前分支最新commit之间的差异
$ git diff 38ec867 ba8f1bf # 显示2个commitID之间的差异
$ git show --name-only [commitID] # 显示某次提交发生变化的文件
$ git diff origin master # 对比 远程分支origin 和 本地分支master 之间的差异
$ git diff --stat master origin/master # 列出 远程分支origin/master 和 本地分支master 之间 有改动的文件
$ git diff branchA branchB # 对比本地分支A和本地分支B的差异
$ git diff --name-only master branchA # 对比本地的 master分支和branchA 分支的差异,只列出差异文件路径
6)回退
$ git reset [file] # 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
$ git reset --hard # 重置暂存区与工作区,与上一次commit保持一致
$ git reset --hard HEAD^ 回退到上一个版本(N个^表示回退到第N个版本)
$ git reset --hard HEAD~X 回退到上X个版本(若X=100:回退100个版本)
$ git reset [commitID] # 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
$ git reset --hard [commitID] # 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
$ git rebase [commitID] # 将分支检出的节点 重置为[commitID]所在节点,同时提交历史会被截断到[commitID]节点
$ git rebase --abort # 取消节点重置的动作
7)打包(tar/tgz/tar.gz/zip)
$ git archive -o HEAD_20181224.zip HEAD # 将当前分支所有文件打包,HEAD 表示最新提交(也可以用CommitID表示)
$ git archive -o 20181224_d89f6aa.zip d89f6aa # 打包指定CommitID(d89f6aa)的所有文件(从仓库创建到该ID的所有文件)
$ git archive -o lastestCommit.zip HEAD $(git diff --name-only HEAD^) # 打包 最新提交 与 上一次提交 之间 变更的文件
# 打包从commitID1到commitID2的所有变更的文件(不包括commitID1提交的文件,但包括commitID2提交的文件)
$ git diff commitID1 commitID2 --name-only | xargs zip Demo001.zip
8)搜索(grep)
$ grep -lr 'user' * # 当前分支下搜索包含“user”字符串的所有文件 (-r 是包含子目录,-l 是只列出文件)
$ grep -nr 'user' * # 当前分支下搜索包含“user”字符串的所有文件的具体的行号和内容(-n 显示行号)
$ grep -nr --exclude-dir=".git" 'user' * # 排除“.git”目录
$ grep -nr --ignore-case --exclude-dir=".git" 'user' * # 忽略大小写(-nr --ignore-case可换成 -nr -i 或 -nri )
9)标记版本号(tag)
$ git tag # 显示所有tag
$ git show v1.1 # 显示tag=v1.1 的详细信息
$ git tag -a v1.1 -m 'test 111' # 当前分支标记版本号,tag=‘v1.1’,备注“test 111”
$ git tag -a v1.1 -m 'test 111' abcd1234 # 给指定的commitID(abcd1234) 标记版本号
$ git push origin v1.5 # 将tag提交到远程仓库
$ git push origin --tags # 将所有tag提交到远程仓库
$ git fetch origin tag V1.2 # 获取指定 tag 的分支内容
$ git checkout v1.2 # 检出 指定tag,但是该分支不可修改
$ git checkout -b branch111 V1.2 # 将 tag=V1.2 的分支内容检出新的分支branch111,以便进行修改
$ git tag -d V1.2 # 删除本地仓库的tag
$ git push origin :refs/tags/V1.2 # 删除远程tag