【一】git安装
1.window安装
https://git-scm.com/downloads下载windows版本,安装即可
![](https://i-blog.csdnimg.cn/blog_migrate/7317290b57e5b21a9eafa20a260aa0da.png)
打开git bash
输入初始化的用户名和密码
$ git config --global user.name "jiangzengkui"
$ git config --global user.email "
676047198@qq.com"
|
如果不初始化,则
【二】基本操作命令集
注意都是在git bash窗口里操作的,不是dos
git init
|
.初始化 git init
cd到存放仓库的目录,执行 git init命令,生成一个.git的隐藏文件夹
|
git add
|
把文件放入暂存区
git add . 当前目录的所有未暂存的文件暂存起来,*表示所有文件
git add a.txt b.txt、
两个文件
git add documentation/*.txt
添加
documentation
目录及其子目录下所有
*.txt
文件的内容
|
git commit -m
|
把暂存区的文件提交到本地仓库
git commit -m "这里写的是备注"
|
git log
|
显示commit的历史信息
![]() |
git reset
|
git reset --hard head^ 回退到上一个版本
git reset --hard head^^ 回退到上上个版本
git reset --hard head~100 回退到之前100个版本
2.回滚到指定版本
git reset --hard 版本id
版本id是commitId,写前几位即可
![]()
eg:
$
git reset --hard bc999ea9f0
注意回退是已经commit的版本,可以回退也可以前进
|
git reflog |
显示执行过得所有命令集,与关闭窗口无关,
![]()
找到一次操作的commitID就可以用git reset 回到这一步了
|
git status
|
查看文件没有被
commit的文件状态git操作状态(包含没有add和commit的文件)
eg:
![]()
两个文件
a1.txt文件,表示是commit后又被修改过,状态为:modiffied
index.html 表示是没有任何操作,才新增的,状态为:untracked
|
工作区/暂存区
|
![]()
git的规则是add进入暂存区stage,commit则进去版本库
|
git diff
比较
|
文件对比
1. git diff filepath 工作区与暂存区比较
git diff 是所有文件对比
git diff f1.txt 制定文件对比
2. git diff HEAD filepath 工作区与HEAD ( 当前工作分支) 比较
3. git diff --staged 或 --cached filepath 暂存区与HEAD比较
4. git diff branchName filepath 当前分支的文件与branchName 分支的文件进行比较
5. git diff commitId filepath 与某一次提交进行比较
|
git checkout
git reset HEAD <file>
|
场景1:
把工作区的内容恢复到上个暂存区的状态【没有add】,就是丢弃工作区的修改
![]()
场景2:
当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改
分两步,第一步用命令
git reset HEAD <file>
,就回到了场景1,第二步按场景1操作。
场景3:
|
git rm |
删除文件
先git rm 文件名 在commit就可以了
![]() |
git show
|
1.查看最新的commit
git show
2.查看指定commit hashID的所有修改:
git show commitId
3.查看某次commit中具体某个文件的修改:
git show commitId fileName
|
|
|
|
|
|
|
本地已有仓库添加到远程仓库
场景:
先有本地库,后有远程库的时候,如何关联远程库。
在github上创建一个空远程仓库
获得提示如下
![](https://i-blog.csdnimg.cn/blog_migrate/f5788eb38be905bf2eacb37d09901e00.png)
1.创建一个本地新仓库与远程仓库关联
echo "# wetest" >> README.md
git init
git add README.md
git commit -m "first commit"
#和远程的仓库对接
jiangzengkui是账号,wetest.git是具体仓库地址
#把本地的推送到远程的master分支上
由于远程库是空的,我们第一次推送
master
分支时,加上了
-u
参数,Git不但会把本地的
master
分支内容推送的远程新的
master
分支,还会把本地的
master
分支和远程的
master
分支关联起来,在以后的推送或者拉取时就可以简化命令。
origin master
以后本地修改后,要提交到远程仓库,用git push origin master就可以了,不需要加 -u
|
2.如果本地已经有个仓库,需要把本地仓库和远程一个空仓库关联
关联远程库:git remote add origin(可修改) branch_Name(为空时默认为master) url
关联之后可以用git remote -v 来检查是否关联成功
git remote add origin
git@github.com:jiangzengkui/wetest.git
git push -u origin master
|
注意:本地工作区目录名和远程仓库名没有必然联系
小结
(1)要关联一个远程库,使用命令
git remote add origin git@server-name:path/repo-name.git
;
(2)关联后,使用命令
git push -u origin master
第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令
git push origin master
推送最新修改;
分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,
而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了!
$ git push origin
上面命令表示,将当前分支推送到
origin主机的对应分支。
如果当前分支只有一个追踪分支,那么主机名都可以省略。
$ git push 如果当前分支与多个主机存在追踪关系,那么这个时候
-u选项会指定一个默认主机,这样后面就可以不加任何参数使用
git push。
$ git push -u origin master 上面命令将本地的
master分支推送到
origin主机,同时指定
origin为默认主机,后面就可以不加任何参数使用
git push了。
不带任何参数的
git push,默认只推送当前分支,这叫做
simple方式。此外,还有一种
matching方式,会推送所有有对应的远程分支的本地分支。
Git 2.0版本之前,默认采用
matching方法,现在改为默认采用
simple方式。
|
从远程仓库克隆到本地仓库
已经有远程仓库,需要clone到本地,形成本地仓库
1.打开远程仓库,获得clone地址
![](https://i-blog.csdnimg.cn/blog_migrate/36dfe18537ae807d23f0b81366030031.png)
2.执行方法 $ git clone 获得的地址
![](https://i-blog.csdnimg.cn/blog_migrate/0bb43419fd32d97e32a26192e62312f5.png)
则在本地git_data文件夹中建立了一个sex的仓库
cd sex
进入本地仓库,以后修改就可以用git push origin master 推送到远程仓库了
小结
要克隆一个仓库,首先必须知道仓库的地址,然后使用
git clone
命令克隆。
Git支持多种协议,包括
https
,但通过
ssh
支持的原生
git
协议速度最快。
分支与合并
git branch <name>
|
创建分支名
git branch 分支名
|
git checkout <name>
| 切换到分支 |
git checkout -b <name> |
创建并切换到分支
|
git merge <name> |
在当前分支下,把指定分支名合并到当前分支
|
git branch -d <name> |
删除指定分支
|
git branch |
查看有哪些分支,当前分支加*
![]() |
Git Bash运行命令后,一直出现冒号:,怎么退出
按Q退出
常见错误:
![](https://i-blog.csdnimg.cn/blog_migrate/9534789ce4c86ebf44e0a6a79f466dc3.png)
原因:
Permission denied (publickey) 没有权限的publickey ,出现这错误一般是以下两种原因
-
客户端与服务端未生成 ssh key
-
客户端与服务端的ssh key不匹配
找到问题的原因了,解决办法也就有了,重新生成一次ssh key ,服务端也重新配置一次即可。
计也是好多人没有遇到问题,但是我遇到了问题。
好吧,我明明已经更新了一遍项目,而且没有任何冲突,这里居然还说本地项目与远程版本发生冲突。
既然这样有冲突,那就强制覆盖原有的分支,反正你现在的也是最新的代码。
运行命令:git push -u origin master -f
这样就解决了。
二、git ssh配置
(一)GIT SSH和https区别
1.clone项目:使用ssh方式时,首先你必须是该项目的管理者或拥有者,并且需要配置个人的ssh key。而对于使用https方式来讲,就没有这些要求。
|
2.push:在使用ssh方式时,是不需要验证用户名和密码,如果你在配置ssh key时设置了密码,则需要验证密码。而对于使用https方式来讲,每次push都需要验证用户名和密码。
|
(2)检查相关项是否配置
是否配置邮件和用户名
|
git
config
-
-
global
-
-
list
![]()
$ git config --
global --
list
// 查看当前用户(global)配置
$ git config --system --
list
// 查看系统config
$ git config --local --
list
// 查看当前仓库配置信息
|
检查是否存在ssh key
|
打开gitbash的窗口,输入
$ cd ~/.ssh
如果目录存在
再输入 ls,看两个文件是否存在:id_rsa id_rsa.pub known_hosts
![]() |
|
|
(3)生成SSH
1
|
$ ssh-keygen -t rsa -C "github注册邮箱"
一直回车
|
2
|
1确认秘钥的保存路径(如果不需要改路径则直接回车);
2如果上一步置顶的保存路径下已经有秘钥文件,则需要确认是否覆盖(如果之前的秘钥不再需要则直接回车覆盖,如需要则手动拷贝到其他目录后再覆盖);
3创建密码(如果不需要密码则直接回车);
4确认密码;
|
3
|
![]() |
3
|
查看文件
![]() |
4
|
再打开你的github,进入配置页:
![]() |
5
|
选择SSH and GPG keys项:
![]() |
6
|
之前生成的是ssh秘钥,所以下面选择New SSH key(笔者这里已经配置了一个key,如果是未配置秘钥的用户,这里应该是空的):
![]() |
7
|
然后用文本工具打开之前生成的id_rsa.pub文件,把内容拷贝到key下面的输入框,并为这个key定义一个名称(通常用来区分不同主机),然后保存:
![]() |
|
|
同一个账号在不同电脑上生成的key一样吗?
答:不一样,如果是不同的电脑用相同的账号配置,必须在自己登陆后的平台录入ssh,这个ssh应该和电脑硬件有关系
出现这两种情况,应该是没有配置ssh
(1)clone时候报错
$ git clone git@gitee.com:jiangsanwa/security.git
![](https://i-blog.csdnimg.cn/blog_migrate/cdff69d66536b06d57f56cd2ba69b344.png)
(2)用 ssh -T git@gitee.com(码云)
![](https://i-blog.csdnimg.cn/blog_migrate/81c4664963f53525b44b2a83e421c0fb.png)
正确配置后应该是这样
![](https://i-blog.csdnimg.cn/blog_migrate/6481e18f73437e65f14a461ae841209b.png)