目录

Git 常用操作命令笔记

正常流程

1
2
3
4
5
git init								#初始化仓库
git add .								#添加文件
git commit -m "提交描述"				 #提交版本
git remote add origin 远程仓库url		 #关联远程仓库
git push -u origin master				#推送到远程仓库

生成SSH密钥

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#配置用户名
git config --global user.name "自己的用户名"

#配置邮箱
git config --global user.email "自己的邮箱地址"

#配置完成会在C:\Users\当前用户名 目录下生成.gitconfig配置文件,请勿删除

#生成公钥和私钥,连续回车即可
ssh-keygen -t rsa -C "自己的邮箱地址(与上面相同)"

#查看公钥,
cat ~/.ssh/id_rsa.pub
#文件路径是C:\Users\当前用户名\.ssh
#id_rsa.pub为公钥
#id_rsa为私钥,妥善保存

创建操作

创建本地仓库

1
git init	#在执行目录下创建git仓库

克隆远程仓库

1
git clone 远程仓库url

提交与修改

添加到缓存区

1
2
3
4
5
git add 文件名		#添加指定文件
git add *.jpg	  #添加所有jpg文件,可自定义后缀名
git add -u		  #提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
git add .		  #提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
git add -A		  #提交所有变化(git add --all 的缩写)

提交版本

1
git commit -m "提交描述"		#将缓存区的内容提交到本地仓库

修改已提交的描述

1
git commit --amend

查看仓库当前状态

1
git status	  #根据提示内容查看是否有没被添加的改动或没被提交的改动

查看变化

1
2
3
git diff 文件名			#工作区——>缓存区
git diff HEAD -- file	  #工作区——>版本库
git diff --cache		  #缓存区——>版本库

查看提交历史

1
2
3
git log						#查看提交记录,信息比较多显的混乱
git log --oneline			#查看主要内容,精简
git log --pretty=oneline	#效果同上

版本回退—已提交

1
2
3
git reset --hard HEAD^			#回退到上一个版本,HEAD表示当前版本,一个^表示一个版本
git reset --hard HEAD~100		#回退到往上100个版本
git reset --hard commit_id		#回退到指定版本,commit_id为提交记录id

撤销修改—未提交

1
2
3
4
git checkout -- readme.txt		#分两种情况如下:
								#没有添加到暂存区时,会回到和版本库一模一样的状态
								#已经添加到暂存区后,又作了修改,撤销修改就回到添加到暂存区后的状态            
git reset HEAD 文件名		#可以把暂存区的修改撤销掉unstage,重新放回工作区,在执行上边checkout命令将工作区改动撤回

git命令记录

1
git reflog 		#用来记录你执行的每一次命令,reflog回流的意思

删除文件

1
2
git rm readme.txt			#确实要删除该文件时执行
git checkout -- test.txt	#误删除恢复,文件中改动无法恢复

分支操作

查看当前分支

1
git branch -v

显示远程分支

1
git remote -v

切换分支

1
git checkout xxx	#xxx为分支名,git checkout master 表示切换到主分支

创建新分支

1
git checkout -b xxx		#git checkout命令加上-b参数表示创建并切换

新建远程分支

1
git push origin 推送的分支:远程的分支

合并分支

1
git merge fake-branch

删除分支

1
git branch -d fake-branch

删除远程分支

1
git push origin –-delete 分支名

修改分支名称

1
git branch -m old_branch_name new_branch_name

远程操作

关联远程仓库

1
2
3
git remote add origin 远程仓库url	#origin是Git默认的叫法,也可以改成别的
#关联多个远程仓库
git remote set-url --add origin 远程仓库url

删除关联

1
git remote rm origin	#删除当前本地仓库与远程仓库origin的关联

查询关联

1
2
git remote		#远程库的信息,只显示远程仓库名字
git remote -v	#显示可抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址

推送

1
2
3
4
#首次推送
git push -u origin master	#第一次推送使用-u 参数把本地的master分支内容推送到远程master分支,会把本地和远程分支关联起来
#关联后推送
git push origin master 		#将本地仓库内容推送到远程仓库

拉取

1
2
3
git pull	#远程库内容更新到本地,相当于下边两个命令组合
git fetch	#从远程分支拉取代码,可以得到远程分支上最新的代码
git merge	#合并

git 代理

设置代理

1
2
git config --global http.proxy http://127.0.0.1:1087
git config --global https.proxy https://127.0.0.1:1087

取消代理

1
2
git config --global --unset http.proxy
git config --global --unset https.proxy

配置忽略文件

在目录创建一个.gitignore文件,并在其中添加要忽略的文件或目录,每行表示一个忽略规则

.gitignore不生效解决办法
1
2
3
#让Git识别该配置文件
git config core.excludesfiles .gitignore			#默认本地仓库
git config --global core.excludesfile ~/.gitignore	#配置全局

.gitignore 只能忽略那些原来没有被跟踪的文件,如果某些文件已经被纳入了版本管理中,则修改 .gitignore 是无效的。解决方法就是先把本地缓存删除(改变成未track状态),然后再提交。

1
2
3
git rm -r --cached
git add
git commit -m "描述"

规则匹配示例

1
2
3
4
5
6
7
8
9
bin/			#忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件
/bin			#忽略根目录下的bin文件
/*.c			#忽略 cat.c,不忽略 build/cat.c
debug/*.obj		#忽略 debug/io.obj,不忽略 debug/common/io.obj 和 tools/debug/io.obj
**/foo			#忽略/foo, a/foo, a/b/foo等
a/**/b			#忽略a/b, a/x/b, a/x/y/b等
!/bin/run.sh	#不忽略 bin 目录下的 run.sh 文件
*.log			#忽略所有 .log 文件
config.php		#忽略当前路径的 config.php 文件

思维导图

​ 导图非原创,来自Git的奇技淫巧

https://z3.ax1x.com/2021/06/06/2UCwy6.png

笔记来源

[1]. Git的奇技淫巧

[2]. Git笔记总结

[3]. Git菜鸟教程