正常流程
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
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 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 checkout xxx #xxx为分支名,git checkout master 表示切换到主分支
|
创建新分支
1
| git checkout -b xxx #git checkout命令加上-b参数表示创建并切换
|
新建远程分支
1
| git push origin 推送的分支:远程的分支
|
合并分支
删除分支
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的奇技淫巧
笔记来源
[1]. Git的奇技淫巧
[2]. Git笔记总结
[3]. Git菜鸟教程