git学习
描述
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或大或小的项目
Git不仅仅是个版本控制系统,它也是内容管理系统,工作管理系统等
Git与SVN的区别:
- Git是分布式的,SVN不是
- Git把内容按照元数据方式存储,SVN是按文件存储
- Git分支和SVN的分支不同
- Git没有全局的版本号,而SVN有
- Git内容完整性要优于SVN
本地仓库有Git维护的三棵”树”组成,这是Git的核心框架.分别是:
- 工作区域: 就是平时存放项目代码的地方
- 暂存区域:
用于临时存放你的改动,事实上它只是一个文件,保存即将提交的文件列表信息 - Git仓库:就是安全存放数据的位置,这里有提交的所有版本的数据.
Git的工作流程:
- 在工作目录中添加/修改文件
- 将需要进行版本管理的文件放入暂存区域
- 将暂存区域的文件提交到Git仓库
HEAD是什么?
HEAD可以看作是”我”,例如 git log日志中HEAD ->
master指的是:我在master分支上
常用命令
- 初始化git
1
git init
- 将文件添加到暂存区域
1
2
3
4
5
6
7
8
9
10
11
12git add 文件名称
把新增、修改的加到暂存区
git add .
添加所有修改、已删除的文件到暂存区中
git add -u [<文件路径>]
git add --update [<文件路径>]
添加所有修改、已删除、新增的文件到暂存区中,省略 <文件路径> 即为当前目录
git add -A [<文件路径>]
git add --all [<文件路径>]
查看所有修改、已删除但没有提交的文件,进入一个子命令系统
git add -i [<文件路径>]
git add --interactive [<文件路径>] - 将文件提交到本地仓库
1
2
3git commit -m "版本描述"
修改上次提交的描述信息
git commit --amend - 添加暂存区并提交
1
2一步完成提交
git commit -am "说明" - 查看当前版本状态(查看是否有未提交的文件)
On branch 分支名称: 表示当前所在分支
nothing to commit,working directory clean:表示工作目录是干净的,没有需要提交的文件
1 | git status |
- 拉取远程仓库的项目
1
2git clone 目标地址
git clone https://github.com/user/demo.git - 撤销
当发现commit的内容有错误的时候有两种处理方法:
1. 修改错误内容再commit一次,但是会留下commit记录
2. 使用git reset命令撤销这一次错误的commit
reset有三个模式:
–head
重置工作区域和暂存区域,也就是说之前没有commit的内容直接擦掉恢复到上一次commit的时候
–soft
重置工作区域,只是将索引指向重置,暂存区还有本次修改的东西,所以会造成新的差异
不加参数(mixed)
保留工作区域,清空暂存区域,也就是说工作目录跟暂存区域强行合并了一次,有差异也会放进工作目录
1 | git reset |
- 查看git的日志信息
1
2
3
4
5
6输出log
git log
简化git日志输出格式
git log oneline
绘制分支图
git log --oneline --decorate --graph --all - 将远程主机的最新内容拉到本地
1
2
3
4将远程最新内容拉到本地,不进行合并
git fetch origin master
将远程主机的master分支最新内容拉取到本地当前分支直接合并
git pull origin master:<本地分支名> - 分支(branch)
1
2
3
4
5
6
7
8
9
10
11创建分支
git branch 分支名称
修改分支名称
如果不指定原分支名称则为当前所在分支
git branch -m [<原分支名称>] <新的分支名称>
强制修改分支名称
git branch -M [<原分支名称>] <新的分支名称>
列出本地的所有分支,当前所在分支以 "*" 标出
git branch
列出本地的所有分支并显示最后一次提交,当前所在分支以 "*" 标出
git branch -v - 切换分支
1
2
3
4
5
6git checkout 分支名称
适用于切换分支的时候将当前分支内容打包带走,同步到切换的分支下
这个命令有两个注意点,1. 两个分支内容不同会造成冲突 2. 切换到新的分支后当前分支修改的内容就丢失了
git checkout --merge <分支名称>
主要要用来比较两个分支之间的差异内容
git checkout -p <分支名称> - 创建并切换分支
1
2
3
4
5
6如果有同名分支则会报错
git checkout -b 分支名称
-B 强制创建,有同名直接覆盖
git checkout -B 分支名称
如果当前分支累计了N次提交,这个命令会创建一个新的分支有N次提交的内容但是没有提交记录
git checkout -orphan <分支名称> - 删除文件
1
2
3
4同时删除工作区域和暂存区文件
git rm
只删除暂存区,只是想要某文件不被版本控制
git rm --cached - 重命名文件
1
git mv 旧文件名称 新文件名称
- 合并分支
1
2合并需要切换到master上
git merge - 删除分支
1
2
3
4如果未合并会有问题
git branch -d 分支名称
强制删除
git branch -D 分支名称 - 操作远程库
1
2
3
4
5
6
7
8
9
10
11
12
13列出已经存在的远程仓库
git remote
列出远程仓库的详细信息,在别名后面列出URL地址
git remote -v
git remote --verbose
添加远程仓库
git remote add <远程仓库的别名> <远程仓库的URL地址>
修改远程仓库的别名
git remote rename <原远程仓库的别名> <新的别名>
删除指定名称的远程仓库
git remote remove <远程仓库的别名>
修改远程仓库的 URL 地址
git remote set-url <远程仓库的别名> <新的远程仓库URL地址> - 将已经提交的记录合并到当前分支
1
git cherry-pick <commit id>
- 从远程仓库获取最新的版本到本地
1
2
3
4将远程仓库所有分支的最新版本全部取回到本地
git fetch <远程仓库的别名>
将远程仓库指定分支的最新版本取回到本地
git fetch <远程主机名> <分支名> - 比较版本之间的差异
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17比较当前文件和暂存区中文件的差异,显示没有暂存起来的更改
git diff
比较暂存区中的文件和上次提交时的差异
git diff --cached
git diff --staged
比较当前文件和上次提交时的差异
git diff HEAD
查看从指定的版本之后改动的内容
git diff <commit ID>
比较两个分支之间的差异
git diff <分支名称> <分支名称>
查看两个分支分开后各自的改动内容
git diff <分支名称>...<分支名称>
使用git diff的时候可能会出现中文乱码的问题,需要设置编码格式
git diff 快照版本号快照版本号 可以对比两个历史快照
git config --global i18n.commitencoding utf-8
git config --global i18n.logoutputencoding utf-8 - 还原提交记录
1
2
3
4
5
6
7
8
9
10
11
12
13重置暂存区,但文件不受影响
相当于将用 "git add" 命令更新到暂存区的内容撤出暂存区,可以指定文件
没有指定 commit ID 则默认为当前 HEAD
git reset [<文件路径>]
git reset --mixed [<文件路径>]
将 HEAD 的指向改变,撤销到指定的提交记录,文件未修改
git reset <commit ID>
git reset --mixed <commit ID>
将 HEAD 的指向改变,撤销到指定的提交记录,文件未修改
相当于调用 "git reset --mixed" 命令后又做了一次 "git add"
git reset --soft <commit ID>
将 HEAD 的指向改变,撤销到指定的提交记录,文件也修改了
git reset --hard <commit ID> - 生成新的提交来撤销某次提交
1
git revert <commit id>
- 让git忽略某后缀的文件,不再识别
在工作目录创建一个.gitignore文件,完了再执行git status,发现指定后缀已经不跟踪状态了。后续要是有不需要跟踪的文件可以再.gitignore里面直接添加该文件的名称
1 | echo *.后缀 > .gitignore |
- 标题: git学习
- 作者: zlong.w
- 创建于 : 2020-08-02 17:47:30
- 更新于 : 2023-09-26 15:42:48
- 链接: https://zlonx.cn/2020/08/02/git学习/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。