Git教程
安装
官网安装,一路next即可
检查版本
1 |
|
初始化配置
- 配置用户名
1 |
|
- 配置邮箱
1 |
|
- 保存信息配置
1 |
|
- 查看配置信息
1 |
|
注:–global表全局配置,对所有仓库有效
–local表本地配置,只对本地仓库有效(不写默认)
–system表系统配置,对所有系统用户生效
新建仓库
方式一:电脑本地创建仓库
1 |
|
创建完成后会在目录下生成一个 .git 的隐藏文件目录,输入
1 |
|
可查看隐藏文件的内容
方式二:克隆已经存在的仓库
1 |
|
会在当前文件夹先生生产一个文件目录,文件目录中才是所有的文件;
并不是把所有文件放在当前文件夹中;
工作区域
工作区
不管是在本地创建,还是克隆。你的目的是修改这个项目里的文件。
这个项目是放在你本地的一个文件夹中的,这个文件夹就是你的工作区,你可以在这个文件夹中对这个项目新增文件,删除文件,修改文件等操作。
[!IMPORTANT]
.git 文件夹不是工作区
暂存区
假设你要为一个项目新增一个“添加”的功能,你需要对这个项目添加和修改多个文件,如果每修改一次就直接提交(git commit),就导致提交过于频繁,一个功能会有多次提交。
如果到时候要查看这个”添加“功能动用了哪些文件,就要查询多次版本历史。
所以,就需要暂存区来保存已经修改的文件,通过(git add)可将文件添加至暂存区。
当“添加”功能开发完成后,再统一提交至仓库中。
做到“多次add,一次commit”。
仓库(版本库)
仓库分为本地仓库和远程仓库
按照我自己的话来说,仓库也可以叫版本库,它包含了一个项目的所有历史记录和修改记录(.git文件中,当然还包括分支),以及该项目的最新工作区。
所以git clone时会克隆下来 .git 文件和最新的工作区
git commit将暂存区提交到本地仓库,git push将本地仓库推送同步到远程仓库
文件状态
未跟踪 Untrack
新创建的,从未被git管理
未修改 Unmodified
已经被git管理,但没有修改
已修改 Modified
修改过,但未放入暂存区
已暂存 Staged
已放入暂存区
添加和提交
git status
使用git status命令可查看当前仓库的状态
初始提示“nothing to commit ”
在工作区创建一个新文件“file1.txt”,再输入git status查看状态。
提示仍然“nothing to commit”,但是多了“untracked file present”,存在未跟踪的文件。
git add与git commit
现在通过git add命令将file1.txt加入暂存区
加入后再查看git仓库状态:
可见file1已经变成了绿色,且“No commit yet”,且提示可使用 “git rm –cached ” 将文件移除暂存区
[!NOTE]
注意:若一个文件并未通过git add 添加到暂存区,则无法被提交
例如新创建一个file2,直接提交,只有处在暂存区的file1会提交,file2仍然不会提交
使用 git add . 可将所有未跟踪的(untracked)文件全部加入暂存区
git log
使用git log可查看提交的日志,其中作者名称和邮箱就是第二步配置的:
在后面加上 **–oneline **可精简日志:
git reset 回退版本
详细见图:
详细演示:
先添加三个文件,并且分三次提交(省略add和commit截图,直接查看log)
接下来我通过git reset –mixed回退到版本2
重新提交reset3后,再通过git reset –soft回退到版本1
最后重新提交后,使用git reset –hard回退到 “第一次提交”,将全部回到最初的样子。
git diff查看差异
- git diff 查看工作区与暂存区之间的差异;若暂存区中没有文件,则会比较上一个版本的暂存区(也可以理解成最新的版本库)或者说会比较尚未暂存的文件的差异
- git diff HEAD 查看工作区、暂存区与本地仓库之间的差异;或者说查看已暂存的与未暂存的所有改动
- git diff - -cached 查看暂存区与本地仓库之间的差异
- git diff
表示HEAD 的前number个版本;例如git diff HEAD~3 HEAD,即比较从HEAD的上一个开始数的第3个,和HEAD之间的差异 - **git diff
**比较分支之间的差异
注意:以上所有命令都可以在最后添加具体的文件名,可以只查看这一个文件的差异
演示如下:
仓库的初始状态
现在我将file3.txt的内容修改为:“我修改了第三个文件”,直接使用git diff查看,可以查看未缓存的文件的差异
现在我将其add后,再次查看差异
现在我将其commit之后
删除文件
普通删除
如果使用windows的图形化删除,或者rm命令删除,实际上是把工作区中的文件删除了,需要先add,再commit一次才能同步删除操作到版本库
- 现在我删除掉file3
- 先add再commit
使用git rm删除
具体演示:
- 当前版本
使用 **git rm
和git rm -f **删除,将会删除工作区和暂存区的文件,,并将删除操作暂存起来,准备提交到 Git 仓库(比如仓库已有file4,但是这次修改了file4并add了,那么工作区、暂存区、版本库都会存在file4,git rm 并commit后,三个地方的file4都会被删除) - git rm 安全删除,会检查文件在暂存区中的状态,防止意外丢失数据。如上则无法删除,因为 Git 不允许你在有未提交更改的情况下直接删除文件,以防止数据丢失。(如已修改已暂存)
- git rm -f 强制删除,忽略文件在暂存区中的状态,直接删除文件。
使用git rm –cached
,仅从暂存区和 Git 仓库中删除文件,保留工作区中的文件,并取消git的跟踪,提交后 版本库中才会删除。
配置GitHub密钥
1 |
|
查看生成的密钥
复制 id_rsa.pub公钥中的内容,打开GitHub–头像–setting–SSH and GPG keys–New ssh key
1 |
|
[!NOTE]
如果在生成密钥时,指定了文件名则还需进行以下几步
【【GeekHour】一小时Git教程】 【精准空降到 06:28】 https://www.bilibili.com/video/BV1HM411377j/?p=11&share_source=copy_web&vd_source=238e2e1ec12ad57fce693f4520f7b4fe&t=388
Host github.com
HostName ssh.github.com # 这是最重要的部分 上面教程前面没有ssh.
Port 443 # 把22端口切换为443
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa