目录
Git是分布式版本控制系统,极其强大的分支管理
集中式版本控制系统
版本库是集中存放在中央服务器的,需联网才能工作
分布式版本控制系统
每个人电脑上都有一个完整的版本库,不需联网
在Git Bash中设置用户名和邮箱
$ git config --global user.name "LWP13226968149"
$ git config --global user.email "LWP13226968149@163.com"
注意
git config
命令的--global
参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
版本库(.git)
又名仓库(repository),可以简单理解成一个目录。这个目录里面的所有文件都可以被Git管理起来;
创建一个版本库并简单添加一个文件的步骤
首先,选择一个合适的地方,创建一个空目录:
$ mkdir JavaWeb
$ cd Javaweb
$ pwd
$ pwd
命令用于显示当前目录
仓库所在目录名最好不包含中文
第二步,通过git init
命令把这个目录变成Git可以管理的仓库:
$ git init
第三步,新建一个.txt
文件,将其放入learngit
目录下,通过git add
命令把文件添加到仓库中:
$ git add readme.txt
第四步,用命令git commit
把文件提交到仓库中
$ git commit -m "lep is a handsome boy"
-m 后面的字符串是对本次提交的说明
git status
查看仓库当前的状态
git diff
查看修改
- 要随时掌握工作区的状态,使用
git status
命令。- 如果
git status
告诉你有文件被修改过,用git diff
可以查看修改内容。
git log
显示从最近到最远的提交日志
git reset --hard <commit id>/<HEAD^>
回退版本
用
HEAD
表示当前版本,(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
cat readme.txt
查看readme.txt
的内容
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD
指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL
:
┌────┐
│HEAD│
└────┘
│
└──> ○ append GPL
│
○ add distributed
│
○ wrote a readme file
改为指向add distributed
:
┌────┐
│HEAD│
└────┘
│
│ ○ append GPL
│ │
└──> ○ add distributed
│
○ wrote a readme file
git reflog
命令 记录了你的每一次命令
工作区和暂存区
工作区:在电脑上能看到的目录
暂存区:工作区中隐藏目录.git是Git的版本库,版本库中主要的有暂存区(stage)和Git为我们创建的第一个分支(master),以及指向master
的一个指针HEAD
git add
命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行
git commit
就可以一次性把暂存区的所有修改提交到分支。
Git管理的是修改,而不是文件!
就好比你用git add命令添加了你刚刚对
readme.txt
文件的修改,在提交前你又更改了工作区里readme.txt
文件的内容,此时用git commit提交 用git status命令查看状态会发现提交前第二次的修改并未提交
当用git add
将文件添加到暂存区时,可以用
git restore --stage readme.txt
命令撤销上传,回到git add
前的状态
git restore readme.txt
命令来放弃工作目录中的修改
删除文件
rm <file>
可以把文件删了,当然,你也可以在目录下直接删了
这时,git中工作区和版本库就不一致了,git status
命令会立刻告诉你哪些文件被删除了:
这时就有两种选择,第一:可以从版本库中拉取回来,把误删的文件恢复到最新版本
git restore test.txt
这样,被我删掉的test.txt
就恢复了;
当然,你也可以让版本库和工作区一样也删掉该文件:
git rm test.txt
远程仓库
添加SSH密钥
由于你的本地Git仓库和GitHub
仓库之间的传输是通过SSH加密的,所以,需要一点设置:
第1步,创建SSH Key。在用户 主目录(例如我的是C:\Users\Administrator)查看是否有.ssh目录;
如果有,则打开目录查看是否有id_rsa
和id_rsa.pub
这两个文件,如果也已经有了,则直接到第2步;
如果没有,通过命令:
ssh-keygen -t rsa -C "LWP13226968149@163.com"
创建SSH Key(这里的邮箱是我的,该命令把邮箱改为你的就行)
创建完成后,用户主目录里会有.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件
id_rsa
是私钥,id_rsa.pub
是公钥
第2步,登录GitHub
,在主界面右上角点击头像-Settings,打开后可以看到左边有一栏Account settings
,找到SSH and GPG keys
,然后,点new SSH Key
,Title填方便记忆你喜欢的就行,在Key文本框里面粘贴id_rsa.pub
文件里的内容,点Add Key
,添加完毕
在
Gitee
上也是一样的操作
添加远程库
登录GitHub
,找到Create a new repo
,创建一个新的仓库,命名随意你喜欢,成功在Github
创建了Git仓库
现在把本地仓库与之关联:
$ git remote add origin git@github.com:LWP123456789/JavaWeb.git
把本地仓库的内容推送到Github
仓库:
$ git push -u origin master
git push
命令,实际上是把当前分支master推送到远程
第一次推送master分支时,使用
-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。
SSH警告
当你第一次使用Git的clone
或者push
命令连接GitHub
时,会得到一个警告:
The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?
这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub
服务器的Key时,需要你确认GitHub
的Key的指纹信息是否真的来自GitHub
的服务器,输入yes
回车即可。
Git会输出一个警告,告诉你已经把GitHub
的Key添加到本机的一个信任列表里了:
Warning: Permanently added 'github.com' (RSA) to the list of known hosts.
这个警告只会出现一次,后面的操作就不会有任何警告了。
删除远程库
$ git remote rm <name>
删除远程库前通常先查看远程库信息:
$ git remote -v
实际上是解除了本地和远程的绑定关系,要想真正完全删除远程库,登录到
Github
在库中Settings删除即可
克隆远程库
$ git clone <HTTPS/SSH/GitHub CLI>
如图,可以在Github
仓库中保存下载地址
推送分支
把该分支上的所有本地提交推送到远程库,推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:
$ git push origin master
如果要推送其他分支,比如dev
,就改成:
$ git push origin dev
抓取分支
创建、查看、切换、合并分支的指令
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
或者git switch <name>
创建+切换分支:git checkout -b <name>
或者git switch -c <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
git merge
与git rebase
的区别https://blog.csdn.net/liuxiaoheng1992/article/details/79108233
标签管理
查看标签
$ git tag
创建标签
$ git tag <name>
删除标签
$ git tag -d <name>
推送某个标签到远程
$ git push origin <tagname>
删除已推送到远程的标签
$ git tag -d <name>
$ git push origin:ref/tags/<names>