git的组成
工作区 Workspace
暂存区 Index / Stage
仓库 Repository
远程仓库 Remote
文件的状态
- 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
git的配置
git使用前需要配置用户签名,用户名和用户邮箱
config 配置有system级别 global(用户级别) 和local(当前仓库)三个 设置先从system-》global-》local 低层配置会覆盖高层配置 分别使用-system/global/local 可以定位到配置文件
查看系统config
git config --system --list
查看当前用户(global)配置
git config --global --list
查看当前仓库配置信息
git config --local --list
config 配置指令
git config
工作区 Workspace
撤销工作区修改
git checkout -- 文件名
#把工作区的修改全部撤销
工作区文件被删除后可以使用git checkout从仓库中恢复
git checkout -- file
# git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令
添加到暂存区
git add
暂存区 Index / Stage
从暂存区的追踪文件中删除
git rm --cache 文件名
查看暂存区的文件
git status
提交到仓库(暂存区的所有内容提交到当前分支)
git commint
-m ”可以写入注释信息“
仓库 Repository
版本回退
git reset有三个选项,–hard、–mixed、–soft。
#仅仅只是撤销已提交的版本库,不会修改暂存区和工作区
git reset --soft 版本库ID
#仅仅只是撤销已提交的版本库和暂存区,不会修改工作区
git reset --mixed 版本库ID
#彻底将工作区、暂存区和版本库记录恢复到指定的版本库
git reset --hard 版本库ID
查看版本
git log --pretty=oneline
git log --oneline
git reflog
查看某个文件在某次提交中的修改:
git show <hashcode> <filename>
查看分支合并图
git log --graph
远程仓库 Remote
git拉取远程代码
git clone https://xxx.git
git拉取远程指定分支下代码(-b 分支名称)
git clone -b v2.8.1 https://xxx.git
分支管理
Git 的分支,其实本质上仅仅是指向提交对象的可变指针。 Git 的默认分支名字是
master
。 在多次提交操作之后,你其实已经有一个指向最后那个提交对象的master
分支。master
分支会在每次提交时自动向前移动。
无论是通过变基,还是通过三方合并,整合的最终结果所指向的快照始终是一样的,只不过提交历史不同罢了。 变基是将一系列提交按照原有次序依次应用到另一分支上,而合并是把最终结果合在一起。
合并
Git官方对于合并的解释:它是把两个分支的最新快照(C3 和 C4)以及二者最近的共同祖先(C2)进行三方合并,合并的结果是生成一个新的快照(并提交)。
查看所有分支
git checkout -b "分支名"
#当前分支前面会标一个*号
创建分支
git branch "分支名"
切换分支
git checkout ”分支名“
新建分支并切换
git checkout -b "分支名"
删除分支
git branch -d "分支名"
分支合并
git merge "分支名"
#将任何分支合并到当前分支中去
合并完后删除分支
git branch -d "分支名"
衍合(变基操作)
可以提取在
C4
中引入的补丁和修改,然后在C3
的基础上应用一次。 在 Git 中,这种操作就叫做 变基(rebase)。 你可以使用rebase
命令将提交到某一分支上的所有修改都移至另一分支上,就好像“重新播放”一样。
首先找到这两个分支(即当前分支
experiment
、变基操作的目标基底分支master
) 的最近共同祖先C2
,然后对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件, 然后将当前分支指向目标基底C3
, 最后以此将之前另存为临时文件的修改依序应用
用于把一个分支的修改合并到当前分支
git rebase
表示把你的本地当前分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把本地当前分支更新 为最新的"origin"分支,最后把保存的这些补丁应用到本地当前分支上
git pull --rebase
, 然后将当前分支指向目标基底 C3
, 最后以此将之前另存为临时文件的修改依序应用
用于把一个分支的修改合并到当前分支
git rebase
表示把你的本地当前分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把本地当前分支更新 为最新的"origin"分支,最后把保存的这些补丁应用到本地当前分支上
git pull --rebase