Git学习总结
最近因为在使用Git的过程中总是会遇到需要合并分支或者解决冲突的情况,而且使用可视化工具的时候总是会有些不直观。所以花了一些时间研究了一下Git的使用。
详细的问题请上Git的官网看文档吧https://git-scm.com/book/zh/v2,真心写的很棒。我这里只是记录一下个人对Git的感受以及自己一些常用命令。
首先需要了解的是Git中的三个工作区域(Git仓库、工作目录、暂存区域)。
a) Git仓库。我们需要区分的是远程仓库和本地仓库。他们一般都是不同的。我们常用了git pull、git push、git fetch其实都是在远程仓库和本地仓库之间进行同步。
git pull相当于git fetch和git merge的和。
b) 工作目录。这里其实就是指你进行了修改但是还没有git add的文件。
c) 暂存区域。他的意思其实是当你下一次提交(git commit)的时候会提交暂存区域内的修改到本地仓库。通过git add将修改添加到暂存区域中来。
现在再来针对单个文件,文件有三种状态。已修改(modified)、已暂存(staged)、提交(commited)。分别对应上述的操作。还有已跟踪和未跟踪,这个关系不大。
接下来进入正题。Git之所以很快流行起来的原因,很大程度上是因为它能够很方便的合并分支。如果对Git中的分支开发工作流不清楚的,强烈建议去看一下https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E6%B5%81。这里假设你已经创建了与远程仓库分支对应的跟踪分支。
合并分支:例如我要将A分支合并到B分支当作
1. 切换到B分支下。git checkout B
2. 更新当前分支。git fetch。有时候会需要加上<name> <branch>
3. 如果有冲突的话合并冲突(这个之后在讲)。git merge
4. 合并分支。git merge A。
5. 如果有冲突的话再解决冲突。
冲突其实可以稍微的分为两种。一种是Git可以自动帮我们搞定的冲突,比如说虽然是在同一个文件,但是不是在同一个位置的修改。还有一种是需要我们自己判断解决的冲突。
第一种:
我们在git merge的之后,会碰到出现给文件命名的情况。之前 一直不理解,其实这里是说这个解决的冲突从新commit的说明。
第二种:
-
-
- 1. git status 查看未合并的冲突文件
- 2. 进入文件,你会看到
-
-
-
-
- <<<<<<< HEAD:index.html
- <div id="footer">contact : email.support@github.com</div>
- =======
- <div id="footer">
- please contact us at support@github.com
- </div>
- >>>>>>> iss53:index.html
- 你可以重新编辑这一段成为你想要的样子。HEAD指的是你当前的分支。
- 3. 使用git add将冲突标记未已解决。
- 4. git commit。提交到本地仓库。
-
-
Note:git add的时候并不会去判断你到底有没有去解决,也就是说哪怕你什么都没干,直接git add 也是可以的,如果你不想被同事打的话。
2018/07/03:
补上团队协作的部分。
其实内容在git的官方文档里面都有。
一般来说我们协作的话可以简单的分为两种模式。
一是:作为开发者对dev分支都有写权限,当你完成工作之后直接解决冲突推送到远程仓库。这种方式感觉比较适合参与人数比较少的项目,或者说没有那么多代码管理的项目,每个人对自己的代码负责。
二是:dev分支是被保护的,除了管理员之外其他人只有读的权限(一般开源项目也是这个样子)。这个时候如果你要参与开发,贡献自己的代码,你需要先fork项目到自己的仓库。这个时候你可以将你的代码推送到自己的远端仓库,然后发出一个pull request请求管理员来拉你的分支。如果可以自动合并的话是可以在网页上合并。
不过一般的流程是管理员pull到本地,测试、审视之后再递交到远端仓库。这种方式可能比较适合对产品有较高要求,团队比较完善的公司。