Git命令总结

环境配置

下载安装

Git - Downloads (git-scm.com)

基本配置

设置用户信息

1
2
3
git config --global user.name "username"
git config --global user.email "XXX"
# 用户名和邮箱仅作为身份标识使用,可以随意填写,但不能不填

查看配置信息

1
2
git config --global user.name
git config --global user.email

为常用命令配置别名

1.在用户目录(C:\Users\username)创建.bashrc文件

1
touch ~/.bashrc

2.编辑.bashrc文件内容

1
2
3
4
# 用于输出git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
# 用于输出当前目录所有文件及基本信息
alias ll='ls -al'

3.执行source ~/.bashrc

创建本地仓库

1
git init

基础操作指令

查看修改状态

1
git status

添加到暂存区

1
2
3
4
# 单个/多个文件的修改
git add 单个文件名|通配符
# 所有修改
git add .

提交到本地仓库

1
git commit -m '注释内容'

查看提交日志

1
2
3
4
5
git log [options]
--all 显示所有分支
-- pretty=oneline 将提交信息显示为一行
-- abbrey-commit 使得输出的commit更加简短
-- graph 以图的形式显示

版本回退

1
2
git reset --hard commitID
# commitID可以在提交日志中看到

查看已删除的记录(执行版本回退之后再回去)

1
git reflog

创建忽略列表

1
touch .gitignore

.gitignore文件内可以使用通配符等对文件或文件夹设置忽略

分支操作

查看本地分支

1
git branch

创建本地分支

1
git branch 分支名

切换分支

1
git checkout 分支名

创建并切换到分支

1
git checkout -b 分支名

合并分支(将某个分支合并到当前所在分支)

1
git merge 分支名称

删除分支

1
2
3
4
# 删除分支时做各种检查
git branch -d 分支名
# 不作任何检查,强制删除
git branch -D 分支名

解决冲突

两个分支修改了相同的部分且均提交后,进行合并时将提示文件冲突,手动修改冲突文件并重新提交即可

Git远程仓库

配置SSH公钥

1.生成公钥

1
ssh-keygen -t rsa

如果公钥已经存在,则自动覆盖

2.获取公钥

1
cat ~/.ssh/id_rsa.pub

3.将公钥添加到远程仓库

4.验证是否配置成功(以gitee为例)

1
ssh -T git@gitee.com

操作远程仓库

添加远程仓库
1
git remote add <远端名称> <仓库路径>
  • 远端名称,默认是origin,取决于远端服务器设置
  • 仓库路径,从远端服务器获取URL
查看远程仓库
1
git remote
推送到远程仓库
1
2
3
4
5
6
7
8
git push [-f] [--set-upstream] [远端名称 [本地分支名][:远端分支名]]
# 如 git push origin master:master
# 若远程分支名和本地分支名相同,则可以只写本地分支
# 如 git push origin master

# -f 强制覆盖 本地与远端冲突,强制覆盖远程

# --set-upstream 用于建立当前分支与远端分支的联系

如果已经建立关联,可以省略分支名和远端名

1
2
# 将当前分支推送到已关联的远端分支
git push
查看本地分支与远端分支关系
1
git branch -vv
从远程仓库克隆
1
git clone <仓库路径> [本地目录]
从远程抓取和拉取

抓取

1
2
3
git fetch [remote name] [branch name]
# 抓取:将远端仓库抓取到本地,不进行合并(merge)
# 如果不指定远端名称和(远端)分支名,则抓取所有分支

拉取

1
2
3
git pull [remote name] [branch name]
# 拉取指令是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge
# 如果不指定远端名称和(远端)分支名,则抓取所有分支蹦更新当前分支
解决远程合并冲突

发生情景:A、B同时拉取远端代码且修改了同一处地方,A先推送到远端,B再进行推送会提示冲突

解决方案: 在提交前先拉取(pull)代码,检查远端代码是否和将要上传的代码有冲突,有冲突的话,手动修改后提交到远端