GIT常用命令
tips
git 配置完 ssh 后,记得初始化仓库url一定不要用
https
,要用git@
, 不然每次都要输密码常用命令
git status
,git add
,git commit
,git push
,git tag
,git push origin --tags
,git add -A
显示日志
1 | $ git diff <file> #和上次提交对比文件 |
版本回退
1 | $ git reset --hard HEAD^ #回退到上一个版本,注意**如果当前更改未提交,回退后将无法恢复** |
版本错误回退后的恢复
1 | $ git reset --hard 版本号 #错误回退后,可通过版本号再恢复回来 |
撤销文件的更改
1 | $ git checkout -- <file> #撤销更改,有两种情况,如果add过(即暂存过),则会回复到暂存的版本 |
撤销文件的删除
未提交过的文件是无法恢复的
- 如果使用
git rm <file>
删除的文件
1 | $ git reset HEAD <file> #先使用这条撤销git版本库中的更改 |
- 如果是
rm <file>
或者直接手动删除的文件
1 | $ git checkout -- <file> #恢复删除的文件 |
添加远程仓库
1 | $ git remote add origin <url/ssh link> |
分支管理
1 | $ git branch --list #列出本地所有分支 |
清除本地缓存
主要是用于解决.gitignore
不生效的问题
1 | $ git rm -r --cached . #删除本地所有缓存的索引,从而解除对.gitignore指定的文件的跟踪 |
另外一种可能是文件编码问题,改为UTF-8
最为合适,不要是UTF-16
等奇怪的编码。
git安装
- System: windows10
ssh -key配置
Git bash 输入cd ~/.ssh
和 ls
检查电脑本机是否有ssh key. 如有则跳过第一步
进入
~
路径下,必须保证当前路径在~
路径下在git命令行敲击
ssh-keygen -t rsa -C "xxx@yyy.zzz"
//建议写自己真实有效的邮箱地址。注意:在敲代码时不要将双引号也敲击进去。然后命令行会出现如下提示:
Enter file in which to save the key (/c/Users/xxxx_000/.ssh/id_rsa):
,直接回车跳过Enter passphrase (empty for no passphrase):
建议直接回车,即没有密码。也可以输入你的密码,这个密码在你push的时候会要求填写,此外输入的密码是隐藏的Enter same passphrase again:
确认密码(若第一次是回车,这次就直接回车跳过)
完成以上步骤,密钥就生成完成了。剩下提示信息可忽略。
id_rsa
为密钥 ,id_rsa.pub.
为公钥
添加ssh key 到Github上 登陆GitHub , 点击右上角的
“▼”→Settings→SSH kyes→Add SSH key
。然后再用文本文档打开c:/Users/xxxx_000/.ssh
里面的id_rsa.pub
文件,全选复制公钥内容。【也可以在git bash输入cat ~/.ssh/id_rsa.pub
获取公钥内容】,之后将公钥粘贴到GitHub中Add an SSH key的key输入框,最后Add Key
配置账户
$ git config --global user.name “your_username”
#设置用户名$ git config --global user.email “your_registered_github_Email”
#设置邮箱地址(建议用注册giuhub的邮箱)
测试ssh keys是否设置成功。
git bash 中输入
ssh -T git@github.com
进行测试,按指示输入即可Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.
#出现此句话,说明设置成功。
到这里,git相关的公钥和账户配置已经完成。
常用命令
创建仓库(公开)
- 点击github右上角的+里面的new repository
- 在repository name栏中输入仓库的名称
- description 栏中可以设置仓库的说明
- 勾选Initialize this repository with a README ,如果想向GitHub添加手中已有的Git仓库,建议不要勾选
- Add
.gitignore
下拉框中选择要使用的框架 - Add a license选择添加许可协议文件
- 点击create repository按钮,完成仓库的创建
- 点击github右上角的+里面的new repository
克隆之前首先要选择克隆文件的位置(cd)
- clone已有仓库
git clone git@github.com:XXX/yyyy.git
//XXX为github的用户名,yyy为仓库名
- clone已有仓库
在对应的文件夹中添加新有项
git status
提交
git add mmm.sss
//mmm为文件名称,sss为文件拓展名(常用git add .
)git commit -m "hhh"
//hhh为git commit 提交信息,是对这个提交的概述git log
//用于查看提交日志git push
//更新GitHub上的仓库
用git创建仓库
mkdir nnn
//仓库名cd hhh
git init
//初始化仓库git status
//查看仓库状态touch README.md
//创建READEME.md文件git add ERADME.md
//添加ERADME.md至暂存区git commit -m "hhh"
//如果想要提交信息记录的更详细,请不要加 -mgit log --pretty=short
//加--pretty=short
只显示提交信息的第一行git log ggg
//ggg
是指指定的文件或目录,用于查看指定的目录、文件的日志git log -p
//查看提交所带来的改动git log -p ggg
//查看指定文件的改动git diff
//可以查看工作树,暂存区,最新提交之间的差别git diff HEAD
//查看工作树与最新提交的差别
分支操作
git branch
//显示分支一览表,同时确认当前所在的分支git checkout -b aaa
//创建名为aaa的分支,并且切换到aaa分支- (
git branch aaa
//创建名为aaa的分支;git checkout aaa
// 切换到aaa分支)能和git branch -b aaa
得到同样的效果
- (
- git checkout - //切换到上一分支
合并分支
git checkout master
//切换到master分支git merge --no--ff aaa
// 加--no--ff
参数可以在历史记录中明确地记录本次分支的合并git log --graph
//以图表形式查看分支
更改提交的操作
git reset
//回溯历史版本 -git reset --hard
//回溯到指定状态,只要提供目标时间点的哈希值
推进历史
git reflog
//查看仓库的操作日志,找到要推历史的哈希值git checkout master
git reset --hard ddd
//ddd为要推进历史的哈希值修改提交信息
git commit --amend
git remote add eee git@github.com:用户名/仓库名.git
添加远程仓库,并将git@github.com: 用户名/仓库名.git
远程仓库的名称改为eeegit push -u eee master
//推送至远程仓库 master分支下 -u 参数可以在推送的同时,将eee仓库的master分支设置为本地仓库的当前分支的的upstream(上游)。添加这个参数,将来运行git pull命令从远程仓库获取内容时,本地仓库的这个分支就可以直接从eee的master分支中获取内容git checkout -b feature d eee/feature
d //获取远程的feature d分支到本地仓库,-b参数后面是本地仓库中新建的仓库的名称git pull eee feature d
//将本地的feature d分支更新为最新状态在GitHub上面查看两个分支之间的差别,只需要在地址栏中输入
http://github.com/用户名/仓库名/分支1...分支2
tag
git tag
显示已有标签git tag -a v1.4 -m 'my version 1.4'
新建标签git push origin v1.5
推送标签到服务器git push origin --tags
一次性推动所有标签
常用指令详解
git add
一次性暂存所有内容,git add *
会有.gitignore
提示,以下命令则不会报错:
命令 | 含义 |
---|---|
git add -A |
stages all changes |
git add . |
stages new files and modifications, without deletions |
git add -u |
stages modifications and deletions, without new files |