Git:分布式版本控制系统
gitee/github:代码托管平台
三种状态
状态 | 说明 |
---|---|
已提交(Committed) | 数据安全地保存在本地数据库,Git中存有特定版本的文件 |
已修改(Modified) | 修改了文件,但是还没保存到数据库,即做了修改但还没有放到暂存区中。 |
已暂存(Staged) | 对一个已修改的文件当前版本做了标记,使之包含在下次提交的快照中。即文件已修改,放入暂存区 |
这样导致Git用途有了三个阶段
工作区:对项目某个版本独立提取出来的内容。(电脑中的目录)
暂存区:一个文件,保存了下次将要提交的文件列表信息,一般再Git仓库目录中。(一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。)
Git仓库目录:Git用来保存项目的元数据和对象数据库的地方。(工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。)
工作流程
- 再工作区中修改文件
- 将想要下次提交的更改选择性暂存,这样智慧将更改的部分添加到暂存区。
- 提交更新,找到暂存区的文件,将快照永久性存储到Git目录。
基本操作
目的 | 代码 |
---|---|
通过命令查看git所有配置信息 | git config --list --show-origin |
设置git的用户名 | git config --global user.name '***' |
设置git的邮箱地址 | git config --global user.email '***' |
查看Git的某一项配置 | git config <key> |
获取帮助文档 | git help <verb> |
git <verb> --help | |
将文件提交至暂存区 | git add <file> |
将文件提交至工作区 | git commit -m 'message' <file> (“-m”:提交信息) |
基础命令
查看当前状态
命令 | 作用 |
---|---|
git status | 查看当前状态 |
转态提示信息:
on brance master
:nothing to commit, working tree clean
:所有工作都已提交,形成了固定的版本。change no staged for commit
:有文件没有加到暂存区,后面会提示那些文件没有被加到暂存区。change to be committed
:有文件需要被提交,后面提示那些文件被修改。Untracked files
:存在未跟踪的文件(新添加但未加入暂存区区域或提交的文件),即git管不到。
查看历史操作记录
命令 | 作用 |
---|---|
git log | 查看历史操作记录 |
git log --pretty=oneline | 将提交解雇打在一行上 |
git log --pretty=oneline --graph | 以图像的结果将日志打印 |
演示结果:
版本回退
命令 | 作用 |
---|---|
git reset head~ | 回退一个版本 |
git reset head~10 | 回退10个版本 |
参数选择
- –hard:回退版本库、暂存区、工作区。(会导致修改后的代码全没了)
- –mixed:回退版本库、暂存区。(reset默认参数)
- –soft:回退版本库。
命令 | 作用 |
---|---|
git reset --hard[soft/.] commitID | 回滚到个别文件 |
命令 | 作用 |
---|---|
git reflog | 查找快照ID号 |
版本对比
命令 | 作用 |
---|---|
git diff | 对比暂存区与工作树版本之间的不同 |
git diff head | 对比工作树和最新提交 |
git diff --cached ***(版本号) | 对比仓库和暂存区 |
git diff 版本号1 版本号2 | 对比两个历史快照 |
删除文件
命令 | 作用 |
---|---|
git checkout -- <filename> | 将暂存区的文件恢复到工作目录 |
命令 | 作用 |
---|---|
git rm <filename> | 删除(暂存区也无了,就版本库还有,提交后版本库也会没有) |
重名名
命令 | 作用 |
---|---|
mv old_name new_name | 重命名成new_name(这一条命令git理解成删除old,新增new),需要git add .在commit |
git mv old_name new_name | 重命名,直接commit提交即可 |
忽略文件
目的:让git识别某些格式的文件,自主不跟踪它们
方法:在工作目录中建立一个.gitignore文件
命令 | 作用 |
---|---|
touch .gitignore | 创建.gitignore文件 |
echo *.## > .gitignore | 让git忽略所有以.##后缀文件 |
分支
目的:保证主版本比较干净,避免多人开发导致代码紊乱
基础命令
命令 | 作用 |
---|---|
git branch <分支name> | 创建一个分支(将主版本复制一份给分支进行开发) |
git checkout <分支name> | 切换分支 |
每一个分支都有自己相关独立的代码!head对应当前操作的版本。
分支合并
合并分支即将f12中进行修改的代码(内容)合并到主分支中。
命令 | 作用 |
---|---|
git merge <分支名> | 将分支名为***的内容合并到master中(要在head指向master时运行) |
如果有两个分支修改同一个版本的话,需要做好冲突的准备,当然最好时谁创建的部分由谁修改,不要贸然修改他人代码。
删除分支
命令 | 作用 |
---|---|
git branch -d 分支名 | 删除一个分支 |
合并提交信息
命令 | 作用 |
---|---|
git rebase -i head~~ | 合并最后两个提交的信息 |
git rebase -i | 合并所有提交信息 |
报错
报错内容:The file will have its original line endings in your working directory
原因:linux和windows系统的换行符不同
换行符 | |
---|---|
windows | CRLF |
linux | LF(git默认) |
一般情况下,git进行commit操作时,会把CRLF转换成LF,pull操作时,会把LF转换成CRLF
解决方案:
git rm -r --cached
git config core.autocrlf false
作用 | |
---|---|
true | add时将结尾的CRLF转换成LF,checkout时将文件的LF转换成CRLF |
false | line ending不做任何改变,文本保持原样 |
input | add时将结尾的CRLF转换成LF,checkout时保持LF(windows不置此值) |