Git是分布式版本控制系统
通过命令 git init 把这个目录变成git可以管理的仓库,这时候你当前testgit目录下会多了一个.git的目录,这个目录是Git来跟踪管理版本的。
git log命令显示从最近到最远的显示日志
我想把当前的版本回退到上一个版本,可以使用如下2种命令,第一种是:git reset --hard HEAD^ , 那么如果要回退到上上个版本只需把HEAD^ 改成 HEAD^^ 以此类推;我们可以通过版本号回退,使用命令方法如下git reset --hard 版本号 ,另外,可以通过如下命令即可获取到版本号:git reflog
工作区:就是你在电脑上看到的目录,比如目录下testgit里的文件(.git隐藏目录版本库除外)。或者以后需要再新建的目录文件等等都属于工作区范畴。
版本库(Repository):工作区有一个隐藏目录.git,这个不属于工作区,这是版本库。其中版本库里面存了很多东西,其中最重要的就是stage(暂存区),还有Git为我们自动创建了第一个分支master,以及指向master的一个指针HEAD。
使用Git提交文件到版本库有两步:
第一步:是使用 git add 把文件添加进去,实际上就是把文件添加到暂存区。
第二步:使用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支上。
-----------------------------------------------------------------------------------------------------------------------
在使用git中,最高频的就是pull,fetch, push, merge, rebase等命令。这里我们对常见命令做剖析:
1. 首先说一下git fetch 和 pull
- 首先在作用上他们的功能是大致相同的,都是起到了更新代码的作用
git分为本地仓库和远程仓库,我们一般情况都是写完代码,commit到本地仓库(生成本地仓的commit ID,代表当前提交代码的版本号),然后push到远程仓库(记录这个版本号),如上图所示。我们本地的git文件夹里面对应也存储了git本地仓库master分支的commit ID 和 跟踪的远程分支orign/master的commit ID(可以有多个远程仓库)。那什么是跟踪的远程分支呢,打开git文件夹可以看到如下文件:
- .git/refs/head/[本地分支]
- .git/refs/remotes/[正在跟踪的分支]
其中head就是本地分支,remotes是跟踪的远程分支,这个类型的分支在某种类型上是十分相似的,他们都是表示提交的SHA1校验和
- 但是,更改远端跟踪分支只能用git fetch,或者是git push后作为副产品(side-effect)来改变。我们无法直接对远程跟踪分支操作,我们必须先切回本地分支然后创建一个新的commit提交。
2. 再说说merge和rebase
rebase 会把你当前分支的 commit 放到公共分支的最后面,所以叫变基。就好像你从公共分支又重新拉出来这个分支一样。
而 merge 会把公共分支和你当前的 commit 合并在一起,形成一个新的 commit 提交
使用 rebase 之后
使用 merge 之后
尽量不要在公共分支使用 rebase
本地和远端对应同一条分支,优先使用 rebase ,而不是 merge
因为往后放的这些 commit 都是新的,这样其他从这个公共分支拉出去的人,都需要再 rebase,相当于你 rebase 东西进来,就都是新的 commit 了