一、Git和SVN区别
- SVN:集中式版本控制系统,版本库集中存放在中央服务器上,
(工作时用自己电脑,开始工作之前需要从中央服务器获取最新版本,然后开始工作,工作完成后,需要把自己所做的工作推送到中央服务器,集中式版本控制系统必须要互联网才能工作) - Git:分布式版本控制系统,版本库在每个人的电脑上
(没有中央服务器,每个人的电脑是一个完整的版本库,工作的时候不需要联网,因为版本都在自己电脑上,每个人的电脑都有一个完整的版本库,通过推送给其他人看自己修改的地方)
备注:Git是直接记录快照,而非差异比较。即将全部文件制作一个快照并保存这个快照的索引,快照流是也。近乎所有操作都是本地执行,Git保证完整性,哈希SHA-1散列校验机制
二、Git中的一些术语+概念
- WorkSpace:工作区
- Index/Stage:暂存区,也叫索引
- Repository:仓库区、本地仓库、存储区
- Remote:远程仓库
- 工作区:通过git init创建的代码库的所有文件但是不包括.git文件(版本库)
- 暂存区:通过git add .//Xxx/Xxxx*添加的修改,都是进入到暂存区了,肉眼不可见,通过git status可以看到修改的状态
- committed:已提交,已经安全的保存到本地数据库中
- modified:已修改,已经修改了文件,还没有保存到本地数据库中
- staged:已暂存,对一个已修改文件的当前版本做了标记,是其包含在下次提交快照中
- Git仓库:保存项目元数据和对象数据库的地方,其他计算机克隆仓库时就是拷贝这里数据
- 工作目录:某个版本独立提取出来的内容,是从Git仓库中提取出来的文件,放在磁盘上供你使用
- 暂存区:是一个文件,保存了下次将提交的文件列表信息,一般在git仓库目录中,又称索引
- repository:仓库,.git文件
- track:跟踪(文件)
- stage:暂存
- commit:提交
- push:推送
- pull:拉取
三、使用Git基本工作流程
- 将Git的一个存储库克隆为工作副本
- 添加/编辑文件修改工作副本
- 将文件的快照放入暂存区域
- 其他开发人员一起更改/更新工作副本
- 在提交之前查看更改
- 提交更改,有冲突解决冲突,无冲突推送到存储库(目的将暂存区域文件放入存储库)
-
提交后,如果意识到有错误,去修改然后再提交并推送到存储库
扩展:
1. Untracked未被跟踪的文件
2. Unmodified未修改
3. Modified修改
4. Staged已暂存
Unmodified -> Modified -> Staged -> Unmodified -> Untracked
未修改文件经过修改,变为已修改,放入暂存区域,提交变为未修改,移除文件变为未被跟踪
四、创建存储库
登陆码云:https://gitee.com/signup 创建和初始化一个新的存储库即可
五、Git的安装
六、命令详解
1. 配置git的一些变量:git config
a.git config --global user.name "xiaohuang" 设置用户名称 (--global全系统设置)
b.git config --global user.email "..." 设置邮箱 (不用global可以单独设置某个信息)
c.git config --global core.editor emacs 切换编辑器为emacs(默认Vim)
d.git config --list 检查配置
e.git config user.name 检查指定配置
2. 获取帮助:git help
a.git help config 获取config命令手册
3. 克隆仓库
a.git clone 仓库地址 克隆已经存在的仓库(完全克隆)
b.git clone 仓库地址 本地仓库名 克隆已经存在的仓库,本地仓库名称设置
c.git init 项目路径 在现有目录中初始化仓库(会生成一个.git的子目录)(仅仅初始化,还没对文件跟踪)
d.git add 文件名 多功能命令, 跟踪文件至暂存区、放入暂存区、合并时把冲突的文件标记为已解决状态、将添加内容到下一次提交中
e.git commit -m '提交信息' 提交文件
4. 检查当前文件状态:git status
a.git status -s 更为紧凑的格式输出
b.git status --short 更为紧凑的格式输出
??:新添加的未跟踪的文件
A:新添加到暂存区中的文件
M:修改过的文件(出现在右边的M是修改未放入暂存区,出现在左边代表修改并放入暂存区)
5. 忽略文件是.gitignore文件
无需纳入Git的管理,也不希望总出现在未跟踪文件列表,如日志文件、临时文件等。
a.*.[oa]:忽略.o或.a结尾的文件
b.*~:忽略所有以波浪符结尾的文件
c.你可能还需要忽略log、tmp、pid目录等文件,一开始就设置好,避免将来误提交无用文件
6. 查看不同:git diff
可以具体查看发生了什么改变,类似git status
a.当前做的哪些更新还没有暂存、有哪些更新已经暂存起来准备好了下次提交
b.git diff 只显示尚未暂存的改动的变化
c.git diff --cached 查看已经暂存起来的变化(--staged同理)
d.git difftool --too-help 图形化分析差异使用
7. 提交更新
a.每次提交前使用git status查看是不是都已经暂存起来了
b.git add . 如果没有全部暂存将所有文件暂存起来使用该命令
c.git commit 提交信息
d.commit后会出现新窗口用于输入提交信息
e.git commit -m "提交信息" 该命令也可以
8. 跳过使用暂存区域
a.git commit -a -m '提交信息' 把所有已经跟踪的文件暂存起来一并提交,跳过git add步骤
9. 移除文件(移除跟踪文件)
a.git rm 从暂存区移除并从工作目录中删除指定的文件
b.手工删除 还需要提交才能不再纳入版本管理
c.git rm -f 强制删除,当已经修改并放入暂存区删除时使用
d.git rm --cached 从暂存区移除并且移除跟踪,但保留目录中
e.git rm log/\*.log 删除log/目录下扩展名为.log的所有文件
f.git rm \*~ 删除以~结尾的所有文件
10. 移动文件
a.git mv file_from file_to 重命名文件时候可以这么用,告诉git
b.上边的命令等价于mv README.md README + git rm README.md + git add README
11. 查看提交历史
a.git log 按照提交事件列出所有的更新
b.git log -p 显示每次提交的内容差异
c.git log -p -2 显示最近两次的提交
d.git log --stat 每次提交的简略的统计信息,列出被修改过的文件
e.git log --pretty 指定使用不同默认格式的方式展示提交历史(short、full、fuller)
f.git log --pretty=format:"%h - %an, %ar : %s" 定制要显示的记录格式
g.git log --pretty=oneline 指定使用不同默认格式的方式展示提交历史(short、full、fuller)
12. 撤销操作
最终只会有一个提交,第二次提交代替第一次提交的结果
a.git commit --amend 已经提交完发现提交信息写错了、几个文件没有添加等,使用该命令重新提交
b.git commit -m '新提交信息' + git add forgotten_file + git commit --amend 同上
13. 取消暂存文件
a.git reset Head <file> 取消暂存,必须在Changes to be committed文字正下方使用
14. 撤销对文件的更改
a.git checkout -- <file> 撤销对文件更改,还原上次提交前
15. 远程仓库
a.git remote 查看已配置的远程仓库服务器
b.git remote -v 显示远程仓库简写与其对应的URL
c.git remote add <shortname> <url> 添加一个新的远程Git仓库,简写代替URL(默认简写为origin)
d.git fetch gs :拉去仓库中有但本地没有的信息(会抓取克隆后新推送的所有工作,但并不会自动合并或修改当前工作,需要手动将其合并工作区)
e.git pull 自动抓取并且抓取后合并远分支到当前分支
f.git push remote-name branch-name 推送到服务器(git push origin master)
g.git remote show [remote-name] 查看某一个远程仓库更多信息
h.git remote rename 修改远程仓库简写名
i.git remote rm XX 移除一个远程仓库
16. 隐藏操作
a.git stash
参考网址:https://www.yiibai.com/git/git_basic_concepts.html
持续更新中~