Git常用命令推荐
# 高频命令
# mv
# 重命名 a.py 为 A.py
git mv -f a.py A.py
2
# add
把工作区内容加入到暂存区,为下一次提交做准备。
# 添加指定的的单个文件
git add one.py
# 添加 当前目录及子目录下 所有新增或改动的文件
git add .
# 添加 当前目录及子目录下 以.py文件结尾的文件
git add *.py
2
3
4
5
6
7
8
# branch
分支相关的操作。
# 查看本地所有分支,及详情(-v)
git branch -v
# 查看远程所有分支(-r),及详情(-v)
git branch -rv
# 查看 本地和远程所有(-a)分支,及详情(-v)
git branch -av
# 创建新分支 new_branch (基于当前分支)
git branch new_branch
# 创建新分支 new_branch (基于指定 a 分支)
git branch new_branch a
git log a
git log new_branch # 可以看到 分支a 和 分支new_branch 的日志信息是一样的
# 删除分支 -d / -D(强制删除),没有merge的分支使用 -d 会报错。
git branch -d new_branch
# 修改分支名
git branch -m <old-branch-name> <new-branch-name>
# 本地分支关联远程分支
git branch --set-upstream-to origin/<branch-name>
# 基于标签建立分支,如果报错先执行:git fetch (同步最新的远程信息到本地)
git branch <new-branch> <tag-name>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# checkout
切换分支等操作。
# 切换到 a 分支,如果 a 分支不存在会报错
git checkout a
# 新建并切换到 a 分支(基于当前分支),若果 a 分支已经存在会报错
git checkout -b a # 等同于 git branch a && git checkout a
# 新建/覆盖 并切换到 a 分支(基于当前分支),若果 a 分支已经存在会被当前分支覆盖(慎用)
git checkout -B a
# 基于本地 b 分支新建并切换到 a 分支,若果 a 分支已经存在会报错
git checkout -b a b
# 基于远程某个分支新建并切换到新分支,如果失败先执行:git fetch (同步最新的远程信息到本地)
git checkout -b <remote-branch-name> origin/<remote-branch-name>
# 抛弃暂存区(add 后)的修改(慎用)
git checkout -f
# 抛弃工作区所有修改(modified)的文件(慎用)
git checkout .
# 抛弃工作区指定修改(modified)的文件(慎用)
git checkout - <file-name>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# commit
提交。
# 提交 add 到暂存区的改动
git commit -m 'commit-message'
# 本次提交合入到上次提交中,本次提交会改变commit-id
git commit --amend
# 本次提交合入到上次提交中,本次提交会改变commit-id,新提交信息会覆盖上次的提交信息
git commit --amend -m '<commit-msg>'
2
3
4
5
6
7
# push
推送本地仓库到远程仓库。
# 推送当前分支 new_branch 到远程仓库 new_branch 分支
git push origin new_branch
# 强制推送(-f),会用本地分支覆盖远程分支(慎用)
git push -f origin new_branch
# 本地分支关联远程分支,关联以后在推送可以不用输入分支
git push --set-upstream origin new_branch
git push # 此时等同于 git push origin new_branch
# 删除远程分支(慎用,不要错删了别人的分支,可以去远程仓库页面中手动删除)
git push --delete origin <branch-name>
2
3
4
5
6
7
8
9
10
11
12
# pull
将远程仓库代码拉到本地仓库。最后会执行merge操作。
# 将远程分支 new_branch 拉到本地 当前 分支
git pull origin new_branch
# 强制拉(-f),会用远程分支覆盖本地分支(慎用)
git pull -f origin new_branch
2
3
4
5
# tag
标签相关操作,标签名 最好不要跟分支名 相同,防止部分操作有冲突。
# 为当前分支所在的提交记录打上轻量标签
git tag <lightweght-name>
# 为某次具体的提交记录打上轻量标签
git tag <lightweght-name> <commit SHA-1 value>
# 为当前分支所在的提交记录打上附注标签
git tag -a <anotated-name> -m <tag-message>
#列出所有的标签名
git tag
# 删除某个标签,本质上就是移除 .git/refs/tags/ 中对应的文件
git tag -d <tag-name>
# 显示标签对应提交记录的具体信息
git show <tag-name> # 或者 git log <tag-name>
# 推送某个标签到远程仓库
git push origin <tag-name>
# 推送所有标签到远程仓库
git push origin --tags
# 删除远程仓库中的某个标签(慎用)
git push --delete origin <tag-name>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# log/reflog
查看日志信息
# 查看当前分支的历史提交信息
git log
# 查看指定分支的历史提交信息
git log <branch-name>
# 查看 当前分支 操作的日志信息,包括merge的过程
git reflog
# 查看 指定分支 操作的日志信息,包括merge的过程
git reflog <branch-name>
2
3
4
5
6
7
8
9
10
11
# reset
回滚相关操作
# --mixed(默认):恢复到工作区(add前)
# --soft:恢复到暂存区(commit前,add后)
# --merge:
# --hard:放弃 已提交和工作区的更新(modified的所有文件),新增的文件(未 add)不会放弃。
# --keep:放弃 已提交,保留当前工作区 新增/更新(如果更新的文件在已放弃的提交里面,会报错)
# 放弃修改,回退到上次提交
git reset --hard
# 恢复到工作区,add前
git reset --mixed HEAD^
# 回滚到指定提交commit前add后
git reset --soft <commit-id>
# 回滚到上上个版本,并且保留工作区的修改
git reset --keep HEAD~2
# 将当前分支与远程分支状态保持一致
git reset --hard origin/<branch-name>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# merge
合并分支
# 当前分支在master,合并 a 分支到master,
# 如果有冲突需要解决冲突,有冲突的文件前面有(both modified),解决冲突后重新提交
git merge a
2
3
# rm
删除相关操作,新增的文件(未 add)未被git跟踪,不能被操作。
# 删除文件,如果文件有更新会报错
git rm <file-name>
# 强制删除文件
git rm -f <file-name>
# 将文件恢复到工作区,add前
git rm --cached <file-name>
# 递归删除目录下的所有文件
git rm -r <dir-name>
# 将所有文件恢复到工作区,add前
git rm -r --cached .
2
3
4
5
6
7
8
9
10
11
12
13
14
# stash
缓存相关操作
笔记
使用场景:在当前分支 branch1 修改了代码,但是临时有个问题需要切换到 branch2 修复紧急 bug,
这时就可以先 git add .
(把所有改动加入到暂存区) 然后执行 git stash save 'stash-msg'
(把改动加入到缓存区),
然后切换到 branch2 修改 bug,修改完 bug 以后切回到 branch1,然后执行 git stash pop
(把改动恢复到工作区),然后继续工作即可。
# 查看缓存区列表
git stash list
# 查看缓存详细信息,查看最近一条记录
git stash show
# 查看指定(索引为2)
git stash show stash@{2}
# 把暂存区代码加入到缓存区
git stash save '<stash-msg>'
# 删除最后一条记录
git stash drop
# 删除指定(索引为1)
git stash drop stash@{1}
# 把暂存区代码恢复到工作区,并且删除暂存区该条记录,恢复最后一条
git stash pop
# 恢复指定一条(索引为2),并且删除缓存区该条记录
git stash pop stash@{2}
# 恢复但不删除最后一条记录
git stash apply
# 恢复但不删除指定一条(索引为2)
git stash apply stash@{2}
#清空缓存区所有记录
git stash clear
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# config
git配置
# 作用区域
# --system
笔记
系统级配置文件含有系统里每位用户及他们所拥有的仓库的配置值。
其位置为 git 的安装目录下的/etc/gitconfig
,即如果 git 的安装目录为D:\Git
,则配置文件地址为D:\Git\etc\gitconfig
。
优先度最低,其配置值可被全局级配置和本地级配置的值覆盖
。一般我们很少会使用系统级的配置。
# 查看系统级配置
git config --system -l
# 编辑系统级配置
git config --system -e
2
3
4
5
# --global
笔记
全局级配置文件包含当前系统用户的拥有的仓库配置值,每个系统用户的全局级配置相互隔离。
全局级别的配置默认保存在当前系统用户的主目录下的 .gitconfig
文件内。
Windows 通常保存在C:\Users\xxxx\.gitconfig
,Linux 为/home/xxx/.gitconfig
。
优先度比系统级高,可覆盖系统级的配置值
。全局级的配置平时使用得比较多,比如设置账号和邮箱
# 查看全局配置
git config --global -l
# 编辑全局配置
git config --global -e
2
3
4
5
# --local
笔记
本地级别的配置保存在当前仓库下面的 .git\config
文件内,通常 .git
文件夹是隐藏的,
Window 要在文件管理器的文件夹选项中打开显示隐藏文件夹才可以看到。这里的配置仅对当前仓库有效,不影响其他的仓库
。
优先级别最高
,如果全局级别或系统级别的配置里出现了同一配置项,则以本地级别配置内容为准
# 查看本仓库配置
git config --local -l
# 编辑本仓库配置
git config --local -e
2
3
4
5
# config 命令
# --add 新增/更新 配置,如果不选择作用区域,默认添加到 --local 区域
git config --global --add user.name "my_name" # 全局中添加 user.name=my_name 的配置
# 显示指定配置项的值
git config user.name
# --unset 删除配置,如果不选择作用区域,默认添加到 --local 区域
git config --global --unset user.name # 删除全局中的 user.name 配置
# -e 编辑配置,如果不选择作用区域,默认添加到 --local 区域
git config -e # 编辑本地仓库配置
# -l 查看配置列表,如果不选择作用区域,默认显示所有
git config -l # 把所有配置输出到终端
2
3
4
5
6
7
8
9
10
11
12
13
14
# 常用的手动配置项
#配置用户名和邮件
git config --global user.name "eastonyangxu"
git config --global user.email "easton_00@163.com"
#windows支持长路径,要不然代码路径太长会报错
git config --global core.longpaths true
#windows默认下载git代码,没有显示链接link属性问题
git config --global core.symlinks true
#windows下载代码编码格式,不会进行转换,提交不转换(默认安装会转换成windows)
git config --global core.autocrlf false
# Git 默认文件名不区分大小写,设置为 false 以后才会区分大小写。设置区域在当前项目即可(默认就是当前项目区域)
git config core.ignorecase false
# Git Base 支持显示中文,如果乱码了需要设置字符编码为 utf-8。我这里没有乱码所以先不给出解决方案,可以在网上查找。
git config --global core.quotepath false
2
3
4
5
6
7
8
9
10
11
12
13
# 其他命令
# 需要查看某个命令的文档,例如查看reset的用法
git reset -h
# 克隆远程仓库到本低
git clone <url>
# 克隆指定分支到本地
git clone -b <branch-name> <url>
# 初始化本地仓库
git init
# 查看本地工作区状态
git status
# 更新远程分支信息到本地
git fetch
# 更新远程某一个分支信息到本地
git fetch origin <branch-name>
# 拉取某一个提交到本分支
git cherry-pick <commit-id>
# 合并其他分支到本分支
git merge <branch-name>
# 撤销工作区代码
git restore .
# 查看修改的代码
git diff
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30