Git
1 2 3 4 5 6 7 8 9 10 11
| 作者:linus 特点: 基于服务器、客户端的运行模式 1. 服务器保存文件的所有更新版本 2. 客户端是服务器的完整备份,并不是只保留文件的最新版本 优点: 1. 联网运行,支持多人协作开发 2. 客户端断网后支持离线本地提交版本更新 3. 服务器故障或损坏后,可使用任何一个客户端的备份进行恢复
历史书,时光机,复仇者联盟
|
什么是Git
1 2 3
| Git 是一个开源的分布式版本控制系统,是目前世界上最先进、最流行的版本控制系统。可以快速高 效地处理从很小到非常大的项目版本管理。
|
Git的特性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| 1. 直接记录快照,而非差异比较 快照 是文件系统的一个功能,相当于给文件拍了一个照片,我们可以基于文件快照恢复文件原来的状态。 快照的拍摄非常快,瞬间完成 我们可以基于文件快照,恢复到拍摄快照时的文件状态。 2. 近乎所有操作都是本地执行 在 Git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息 特性: 1. 断网后依旧可以在本地对项目进行版本管理 2. 联网后,把本地修改的记录同步到云端服务器即可
Git 的记录快照 Git 快照是在原有文件版本的基础上重新生成一份新的文件,类似于备份。为了效率,如果文件没有修改,Git不再重新存储该文件,而是只保留一个链接指向之前存储的文件。
|
Git 中的三个区域
Git 中的三种状态
1 2 3
| 已修改 modified 已暂存 staged 已提交 committed(未修改)
|
配置用户信息
1 2 3
| git config --global user.name "itheima" git config --global user.email "itheima@itcast.cn"
|
Git 的全局配置文件
获取Git仓库的两种方式
1 2
| 1. 将尚未进行版本控制的本地目录转换为 Git 仓库 2. 从其它服务器克隆一个已存在的 Git 仓库
|
初始化Git仓库
1 2 3
|
git init 命令会创建一个名为 .git 的隐藏目录,这个 .git 目录就是当前项目的 Git 仓库,里面包含了初始的必要文件,这些文件是 Git 仓库的必要组成部分
|
工作区中文件的4种状态
1 2 3 4 5 6 7
| 未被Git管理
已被Git管理
Git 操作的终极结果:让工作区中的文件都处于“未修改”的状态。
|
检查文件的状态
1 2 3
| git status 新建的文件出现在 Untracked files (未跟踪的文件) 下面。 未跟踪的文件意味着 Git 在之前的快照(提交)中没有这些文件; Git 不会自动将之纳入跟踪范围,除非明确地告诉它“我需要使用 Git 跟踪管理该文件”。
|
以精简的方式显示文件的状态
1 2 3 4
| git status -s git status --short
|
跟踪新文件
提交更新
1 2 3
| git commit git commit -m "提交描述信息"
|
如何把修改的文件提交到文件中
1 2
| git add . git commit -m "提交描述信息"
|
撤销对文件的修改
取消暂存
1 2
| git restore --staged 文件 git reset HEAD
|
跳过使用暂存区域
1 2 3 4 5
| Git 标准的工作流程是工作区 → 暂存区 → Git 仓库,但有时候这么做略显繁琐,此时可以跳过暂存区,直接将工作区中的修改提交到 Git 仓库,这时候 Git 工作的流程简化为了工作区 → Git 仓库
Git 提供了一个跳过使用暂存区域的方式, 只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:
|
移除文件
1 2 3 4 5 6 7
| git rm -f 文件 git rm --cached 文件
1. 直接在目录中删了文件 2. git rm/add 文件 3. git commit -m "删除了文件"
|
忽略文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。 在这种情况下,我们可以创建一个名为 .gitignore 的配置文件,列出要忽略的文件的匹配模式。
文件 .gitignore 的格式规范如下:
星号 * 匹配零个或多个任意字符 [abc] 匹配任何一个列在方括号中的字符 (此案例匹配一个 a 或匹配一个 b 或匹配一个 c) 问号 ? 只匹配一个任意字符 两个星号 ** 表示匹配任意中间目录比如 (az 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等) 在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)
|
.gitignore文件的例子
只会忽略未跟踪的文件,如果一个文件已经被跟踪,就算我们加入到gitigore文件中也不会被忽略
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| *.a
!lib.a
/TODO
build/
doc
*.pdf
|
查看提交历史
1 2 3 4 5 6 7 8 9 10 11 12
| git log
git log -2
git log -2 --pretty=oneline
git log -2 --pretty=format:"%h | %an | %ar | %s"
|
回退到指定的版本
1 2 3 4 5 6 7 8 9 10 11
| git log --pretty=oneline
git reset --hard <CommitID>
git reflog --pretty=onelone
git reset --hard <CommitID>
|
连接远程仓库的两种方式
HTTPS
1 2 3 4 5 6 7 8 9 10 11 12 13
| echo "# project_01" >> README.md git init git add README.md git commit -m "first commit" git branch -M main git remote add origin https: git push -u origin main
git branch -M main git push -u origin main
|
SSH
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| SSH key 的作用:实现本地仓库和 Github 之间免登录的加密数据传输。 SSH key 的好处:免登录身份认证、数据加密传输。 SSH key 由两部分组成,分别是: ① id_rsa(私钥文件,存放于客户端的电脑中即可) ② id_rsa.pub(公钥文件,需要配置到 Github 中)
1. 打开 Git Bash 2. 粘贴如下的命令,并将 your_email@example.com 替换为注册 Github 账号时填写的邮箱: ssh-keygen -t rsa -b 4096 -C "2777840869@qq.com" 3. 连续敲击 3 次回车,即可在 C:\Users\用户名文件夹\.ssh 目录中生成 id_rsa 和 id_rsa.pub 两个文件
1. 使用记事本打开 id_rsa.pub 文件,复制里面的文本内容 2. 在浏览器中登录 Github,点击头像 -> Settings -> SSH and GPG Keys -> New SSH key 3. 将 id_rsa.pub 文件中的内容,粘贴到 Key 对应的文本框中 4. 在 Title 文本框中任意填写一个名称,来标识这个 Key 从何而来
|
检测 Github 的 SSH key 是否配置成功(输入yes)
基于 SSH 将本地仓库上传到 Github
1 2 3
| git remote add origin git@github.com:erha2777/project_02.git git branch -M main git push -u origin main
|
master 主分支
功能分支
1 2 3 4 5
|
git branch git branch -a
|
创建新分支
切换分支
1 2
| git checkout 分支名称 git checkout -b 分支名称
|
合并分支
1 2 3 4
| git checkout master
git merge login
|
删除分支
遇到冲突时的分支合并
1 2 3 4 5 6 7 8
|
git checkout master git merge reg
git add . git commit -m "解决了分支合并冲突的问题"
|
将本地分支推送到远程仓库
1 2 3 4 5 6 7 8 9 10 11
|
git push -u 远程仓库的别名 本地分支名称:远程分支名称
git push -u origin payment:pay
git push -u origin payment
git branch -r
|
跟踪分支
1 2 3 4 5 6 7 8
|
git checkout pay
git checkout -b 本地分支名称 远程仓库名称/远程分支名称
git checkout -b payment origin/pay
|
拿取远程分支的最新的代码
删除远程分支
1 2 3 4
| git push 远程仓库名称 --delete 远程分支名称
git push origin --delete pay
|
命令行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| git config --list --global git config user.name git config user.email
git help config git config -h
git init git clone 远程仓库地址 要改为的名字
pwd clear
git status git status -s git status --short 1. ?? 未跟踪 2. A 已暂存 3. M 已修改(红色未暂存 绿色以暂存)
git add 文件名 git add .
git commit git commit -m "提交描述信息"
git checkout -- 文件
git restore --staged 文件 git reset HEAD
git commit -a -m "描述信息"
git rm -f 文件 git rm --cached 文件
git log git log -2 git log -2 --pretty=oneline git log -2 --pretty=format:"%h | %an | %ar | %s"
git log --pretty=oneline git reset --hard <CommitID> git reflog --pretty=oneline git reset --hard <CommitID> git branch git branch -a git branch -r git branch 分支名称 git checkout 分支名称 git checkout -b 分支名称
git push -u 远程仓库的别名 本地分支名称:远程分支名称
git merge 分支名称
git branch -d 分支名称
git checkout 远程分支名称 git checkout -b 本地分支名称 远程仓库名称/远程分支名称
git pull
git push 远程仓库名称 --delete 远程分支名称
cat ~/.ssh/id_rsa.pub
git remote git remote -v
git commit --amend -m "修改上一次的注释"
|