git与svn最大的不同在于git为分布式版本控制系统,每个本地库都是一个完整的版本控制系统,可以离线操作。
一、一些基本概念
1. 工作区(Working Directory)
当前项目的文件,用于进行操作,已提交到库的文件切换分支时会被删除或替换
2. 暂存区
用于标记工作区中需要提交的文件
3. 本地库
本地的版本控制库
4. 远程库
远程的版本控制库,用于多人进行协作
二、文件的几种状态
1. 未追踪(untracked):文件只存在于“工作区”
2. 已追踪(tracked),又分为3类:
- Unmodified: “工作区”的文件与“本地库”最新版文件相同;
- Modified: “工作区”的文件与“本地库”最新版文件不同;
- Staged: “工作区”的文件与“本地库”最新版文件不同,并且已标记到“暂存区”
三、一些操作
1. “工作区”与“暂存区”之间
“工作区”标记到“暂存区”,命令为:git add
- “本地库”未存在的文件状态:未追踪 ==》已追踪
- “本地库”已存在的文件状态:Modified ==》Staged
“暂存区”取消标记,命令为:git reset(或git rm --cache)
- “本地库”未存在的文件状态:已追踪 ==》未追踪
- “本地库”已存在的文件状态:Staged ==》Modified
2. “暂存区”与“本地库”之间
“暂存区”提交到“本地库”,命令:git commit,文件状态:Staged ==》Unmodified,并创建一次新的commit
提交到“本地库”之后,可以进行回退到之前的任一commit,命令有:git reset(或git revert)
3. “本地库”与“远程库”之间
“本地库”推送到“远程库”,命令:git push “远程库”拉取到“本地库”,命令:git pull(或git fetch+git merge)