四个工作区域
Workspace: 工作区,就是你平时存放项目代码的地方
Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
Git 工作流程
1. 在工作目录中修改文件。
2. 暂存文件,将文件的快照放入暂存区域。
3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录
文件四种状态
Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified.如果使用git rm移出版本库, 则成为Untracked文件
Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改
Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified
新建文件--->Untracked
使用add命令将新建的文件加入到暂存区--->Staged
使用commit命令将暂存区的文件提交到本地仓库--->Unmodified
如果对Unmodified状态的文件进行修改---> modified
如果对Unmodified状态的文件进行remove操作--->Untracked
常用命令
初始化
git init //创建 git clone /path/to/repository //克隆 git config --global user.email "you@example.com" //配置email git config --global user.name "Name" //配置用户名
操作
git add <file> // 文件添加,A → B git add . // 所有文件添加,A → B git commit -m "代码提交信息" //文件提交,B → C git commit --amend //与上次commit合并, *B → C git push origin master //推送至master分支, C → D git pull //更新本地仓库至最新改动, D → A git fetch //抓取远程仓库更新, D → C git log //查看提交记录 git reflog // "reference log" 的缩写,查看 Git 仓库中的引用的移动记录。 git status //查看修改状态 git diff //查看详细修改内容 # git diff:是查看 workspace(工作区) 与 index(暂存区) 的差别的。 # git diff --cached:是查看 index(暂存区) 与 local repositorty(本地仓库) 的差别的。 # git diff HEAD:是查看 workspace 和 local repository 的差别的。(HEAD 指向的是 local repository 中最新提交的版本) git show //显示某次提交的内容
撤销
git reset <file>//某个文件索引会回滚到最后一次提交, C → B git reset//覆盖了缓存区,工作区处于modified, C → B git reset --hard // 覆盖了工作区、缓存区, C → B → A git reset --soft // 撤销了提交,工作区处于待提交状态 staged //2.3 版本后不推荐用checkout 命令撤销 git checkout // 从index复制到workspace, B → A git checkout -- files // 文件从index复制到workspace, B → A git checkout HEAD -- files // 文件从local repository复制到workspace, C → A git revert //撤销某次提交 用于 git restore
分支操作
git checkout -b branch_name //创建名叫“branch_name”的分支,并切换过去 git checkout master //切换回主分支 git branch -d(-D) branch_name // 删除名叫“branch_name”的分支 git branch -a //查看本地和远程分支 git branch -vv //查看,当前的本地分支与远程分支的关联关系 git push origin branch_name //推送分支到远端仓库 git merge branch_name // 合并分支branch_name到当前分支(如master) git rebase //衍合,线性化的自动, D → A
git rm -r --cached . //从版本管理移除文件,对本地文件不影响 ,经过这步操作 再编辑.gitignore 才有效果
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。