使用git init 命令创建一个本地仓库
![83598afa06cb3643d6c3b7ccc2fbe3ab.png](https://i-blog.csdnimg.cn/blog_migrate/fdbdcd74ae238e45333974e7111bbf2a.jpeg)
得到的文件结构如下图:
![dc203ae389005a048d0af7036cda867f.png](https://i-blog.csdnimg.cn/blog_migrate/f1f2ce59fa63ae45e788ec4237e399d1.jpeg)
![ac2519061c5ab24e046b6b9989e2e67a.png](https://i-blog.csdnimg.cn/blog_migrate/786b2ed10f6648cf77aa7b994f1d24a7.jpeg)
使用git status 命令查看工作区状态
![086c2e9753d4b4d6f6640028a3a60598.png](https://i-blog.csdnimg.cn/blog_migrate/d3da14c08e1e04e8cae26ed1e5d375f5.jpeg)
git add 命令添加工作区文件到仓库
![29cf0d5551ea982fd816f23e9899691e.png](https://i-blog.csdnimg.cn/blog_migrate/e9346d9bd634aec143ec808cae515598.jpeg)
![b516187485c25e1775b227586c76d497.png](https://i-blog.csdnimg.cn/blog_migrate/7853aee0e2ca50665b345232fc794f54.jpeg)
分别修改f.txt文件两次,每次增加一行代码后保存,然后运行git add f.txt
我们发现每次文件修改保存后,只要文件有变化,就会在objects目录下有新的文件夹生成,其实这里就是存放我们每次文件的记录的。经测试文件没有修改,运行git add f.txt是没有变化的。
![4fea425be6928c97d32d6b7c64a061e0.png](https://i-blog.csdnimg.cn/blog_migrate/d433a4ff9b7b91094770396a202fcbe9.jpeg)
提交文件(git commit)
git commit -m "first"
-m参数是备注的意思后面跟着我们这次提交的备注信息。
![1edc7ec59033d759b67ef0adf5e08d0e.png](https://i-blog.csdnimg.cn/blog_migrate/ee7bef780940a1e806a628fdb81e1fe0.jpeg)
提交后查看工作区状态
![d8f0452dd2a723d43d2c6d2d3c979d99.png](https://i-blog.csdnimg.cn/blog_migrate/eb282e20d4ddb8fec171d443c2243586.jpeg)
git log查看日志
![0b3ce990aa2c2a8f36c1b721c14f5886.png](https://i-blog.csdnimg.cn/blog_migrate/755bf80a079c2bac37dcac8f5ade8689.jpeg)
查看提交详情(git show)
git show 24acb470df451a7b6c97d9bc64ff971ce7403d72
git diff命令查看文件不同
![06018884e2f3aba7dd7fa1aa2160f249.png](https://i-blog.csdnimg.cn/blog_migrate/6f4baa4d9664436d39c0aac72ae34c14.jpeg)
第一行运行时没有任何结果,因为我们刚comiit(提交)了代码,所以工作区与仓库的内容没有不同。当我们将e.txt文档增加了一行aaaa后,运行git diff将会看到对比后的结果。
git reset命令恢复工作区到指定的更新点
![818d510612a13a393583bedc84a03d30.png](https://i-blog.csdnimg.cn/blog_migrate/7d213aad223a667b0cf69c1e9cda6ea9.jpeg)
运行命令git reset --hard c551ecc634efc9e1339f2e35347d4ff704ce1615
![2371ad47f8d1d4ab5c70165f13c090fa.png](https://i-blog.csdnimg.cn/blog_migrate/89f8ad71dbdd139838166ea704f6c7f1.jpeg)
这时我们在打开f.txt,e.txt发现文件内容的确恢复到当时内容的情况了。
![395936eb58cdfab80f50541529691349.png](https://i-blog.csdnimg.cn/blog_migrate/c4e2f909427bda56b5228acc1d92d85b.jpeg)
git branch -l查看分支命令
git中分支的意思是以当前master为基准开出一个新的分支,仓库在创建时就有一个默认分支master.如下图:
![1d622d5e6cfb13411895e4ca98bd6c30.png](https://i-blog.csdnimg.cn/blog_migrate/1aff5cfaa3b880cefca9331a9c558ef1.jpeg)
下面我们根据实例看一下到底分支是怎么起作用的
创建我们创建一个仓库,然后在工作区创建一个a.txt文档,添加一行内容:111,然后添加到索引区(add),然后提交(commit)。
![96f31c896e27a3e9b973b1e05aad54f3.png](https://i-blog.csdnimg.cn/blog_migrate/7975c008092ec7cb9266fc88928fa002.jpeg)
创建新的分支
git branch b1
切换到新的分支
git checkout b1
![d92ca52f3bcfe667a6761c025d06a003.png](https://i-blog.csdnimg.cn/blog_migrate/d915d42e49c23b49c33fa3f9d8884016.jpeg)
这时我们分支b1里保存的就是从master复制来的文件快照,当我们切换到分支b1后修改一下a.txt增加一行内容:222,然后add(添加到索引区),然后再commit(提交)
![580143766d4f1a61efc7a21574417a6d.png](https://i-blog.csdnimg.cn/blog_migrate/664051cd54e1dbc4a2fc015436958bc2.jpeg)
以上部分我们分支b1和分支master内容就不相同了.其中master中的a.txt还是只有一行内容:111
我们先checkout 到master下
git checkout master
然后打开a.txt查看内容如下:
![0a7823c0269b33fba622ad250c71815a.png](https://i-blog.csdnimg.cn/blog_migrate/cf8a32f4adfec0ffd3e6d348d2e1b954.jpeg)
然后我们切换到b1分支下
git checkout b1
然后打开a.txt查看内容如下:
![0f6adefe9d48992133c5caf143eb3f79.png](https://i-blog.csdnimg.cn/blog_migrate/8912d4fa8b5538df5a5d372e6219ae2d.jpeg)
以上就演示了git神奇的分支功能,我们可以在代码某一个版本后,开一个分支,继续编写另一套程序。最常见的应用场景之一就是我们比如在做好一套web框架后,基于这个框架开分支编写具体的应用程序。
分支的合并
上面说了分支可以将多套代码分别管理的功能,当然git中分支的强大功能还不局限于此。下面我们讨论一下分支的合并功能。
接着上面的步骤,我们在分支b1中给a.txt内容增加了一行:222,那么现在master中a.txt内容还是:111,如果我们想把b1分支合并来,那怎么做?答案是使用git merge命令。
![70c4e50afe147bf6897c0eb1c7217747.png](https://i-blog.csdnimg.cn/blog_migrate/922e827d9541b403efaf7bbfccc41318.jpeg)
这时在master下查看a.txt内容与b1分支查看文件内容都是同样的两行内容了。(也就是实现了把b1分支下的文件内容合并到了mater下)
![197be69da97699898f40871fb4d5be5c.png](https://i-blog.csdnimg.cn/blog_migrate/f7930a367a7844d925a8471349cdd4b0.jpeg)
关于分支冲突的产生
如果说上一步合并前,我们修改master分支下的a.txt,我们增加了一行内容:aaa,并提交了。这时如果我们运行合并命令时,会有出错提示:
![af766a1031477861c4adb83f20108a9e.png](https://i-blog.csdnimg.cn/blog_migrate/44f1518c98fa137adcc9e11ab048cd3a.jpeg)
因为我们这时master分支下a.txt内容为:
111
aaa
而b1分支下a.txt内容为:
111
222
因而在合并时出现了冲突
![49f2c3f5ea8bb9ea5a747d237fa128a4.png](https://i-blog.csdnimg.cn/blog_migrate/4a019da1eea06a31cf786e2a899d27e6.jpeg)
至于 冲突的处理,我们继续看
![6437493b0b488373e303d227637fc285.png](https://i-blog.csdnimg.cn/blog_migrate/0a67c0db1524a8dfeff5fa58c2dc7bd5.jpeg)
如上图,出现冲突后,git已经在出现冲突的文件里给我们标记好冲突的位置及内容,我们修改好文件后,使用git add 然后git commit把修改好的文件提交到我们的master分支里即可。