使用小乌龟和命令合并git代码,让冲突更简单!
Git作为一个必备的版本管理之一,其重要性不言而喻不言而喻。
版本管理功能可能都差不多,svn也是。
git作为分布式版本管理工具,允许你在自己家,没网的时候也随心所欲地提交事物(当然更多指是的代码),这一点可能和svn就绝对地分隔开来了。
git的功能很多,我们也没必要每个都要去精通。我们需要做的,只是让自己的工作能够运行得很顺畅不卡壳。就够了。下文将以目的为出发点,提出一些实用主义。
git其实本身只是一些命令,也就是说,如果不出意外地话,你要一个个代码地去敲出来,然后达到你版本管理的作用。然而,这对一些还不是很懂的小伙伴来说,这太扯淡了。然后,可能就不用这块金砖了。
入门,工具选用。基于git提供的强大命令集,基于许多小白,自然少不了有人会提供一些可视化的界面给你操作。(但请不要忘记其本质)。工具如,tortoisegit(且称之为小乌龟),sourcetree。个人觉得小乌龟更好用,我曾经看其他同学用过以及自己试用过sourcetree,结果是sourcetree表面看起来整体界面牛逼,很全面,但是真正用的时候感觉各种不方便。还是小乌龟实用些,没有华丽的表面,只是简单的右击菜单,但是核心上面下了功夫了。下面将以小乌龟讲解。
入门,小白操作。首先,咱们拿到这个工具,应该不会一上来就进行自己开创性的工作吧(个人感觉),比如,你如果想成为作家进行写作,那么你肯定得先读过许多别人写的文章吧。所以,我们用git也是,先拿别人的仓库,拿过来搞搞嘛。右击一下小乌龟的菜单》克隆,然后把别人的仓库搞到本地来,然后研究研究。当然,咱们最开始的时候也可以不用进行权限验证之类的操作。搞下来之后,先看看别人的操作日志嘛,右击菜单 查看日志或show log,然后你就可以查看整个项目的提交情况了。然后,你得想自己改个东西,然后提交一下。这简单,只要在你强加工具把内容改掉,这时,你就能看到这个文件被改变了,然后右击提交,输入备注信息,就提交了。(注意,这时是需要身份验证的,在设置里输入授权信息就可以了)。到这里的提交,咱们是不和网络打交道的,也就是说,提交的操作是可以断网操作的。然后,右击推送push操作一下,就可以正式把改动推送到远程了,这时查看这个仓库的人就可以看到你的改变了。如果没什么意外,你已经学会了使用git工具进行事务变更操作了。但是有个问题,如果按照这些操作,那么所有的操作都将会是顺序进行的,也就是说,在一个时间点,应只有一个人在操作仓库里的东西,这太扯淡了,怎么只有一个人操作呢,项目基本都意味着同时有n个人操作,可能是同一个文件,同一个单词。针对这种情况,版本工具只会也只能做一件事情,报告老板,你们发生冲突了,你们自己解决下吧,我干不了这活。其实冲突还好,关键是两个人改的东西,到最后要呈现不一样的效果,比如两个项目,虽然都改同一个地方,但是上线的时间点不一样,所以,不可能把冲突解决完就行,而是完全隔离开两个做的东西。所以有了分支。分支相当于有多份相同的仓库,你用你的,我用我的,自然就没有问题了。右击菜单,创建分支,切换分支,然后你就相当于搞到了另一个仓库了,这又是一片不一样的天地。然后又做起来了你的老本行,修改~提交~推送~查看日志。ok,没什么其他事的话,你已经可以正常工作一段时间了。但是,还差一个问题,你的分支怎样让别人发现?别人不可能切到你的分支来搞事情吧,你得主动把你你的分支合并到master老板那里去。切换到master,右击合并(merge),选择你要合并过来的分支,就可以把代码合并了,没什么问题的话,git已经自动把代码合并好了,你只要推送一下就行了。ok,一切都工作得很好。那么,万一呢,我说的是万一合并出了问题呢?怎么办?这才是体现你功底的时刻呢,顺境你好我好大家好,而狭路相逢勇者胜。
出现冲突,怎么解决?1. 直接使用别人的版本,然后自己把自己改的代码一点点加上去,这对于少量的改动,还是很不错,先假设自己错了,然后自己改正自己。真棒,是个好孩子。 2. 直面冲突,发现自己的代码是别人没有的,那么,把自己的加上;发现别人有的自己没有,把别人的加上;发现自己的和别人的完全是同一个地方有重叠,那么只能找当事人一起,共同探讨方案了,要么你进,要么你退。
说了半天,还没说到高级用法呢?
1. git branch -a //列出所有拉取下来的分支
2. 分支创建相关 //依据远程分支新建分支
2.1 git checkout -b develop origin/develop
2.2 git branch –track develop origin/develop #不存在分支
2.3 git branch –set-upstream-to develop origin/develop #已存在分支
2.3 git branch –set-upstream develop origin/develop
2.4 git branch # 创建新的分支
2.5 git checkout -b develop # 创建新的分支,并且切换过去
2.6 git checkout -b 新分支名 老分支名(这种写法的意思为基于老分支创建新的分支)
3. git pull //拉取本分支
4. git fetch //拉取所有分支
5. git clone git@192.168.1.206:root/frontend_oss.git
6. git push develop origin/develop
6.1 git push # push所有分支
6.2 git push origin master # 将本地主分支推到远程主分支
6.3 git push -u origin master # 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库)
6.4 git push origin # 创建远程分支, origin是远程仓库名
6.5 git push origin : # 创建远程分支
6.6 git push origin : #先删除本地分支(git br -d ),然后再push删除远程分支
6.7 git push -v –progress “origin” REL_0228_baiduapi_v1.0:REL_0228_baiduapi_v1.0
7. git merge origin/master
7.1 分支合并和rebase
7.2 git merge # 将branch分支合并到当前分支
7.3 git merge origin/master –no-ff # 不要Fast-Foward合并,这样可以生成merge提交
7.4 git rebase master # 将master rebase到branch,相当于: git co && git rebase master && git co master && git merge
8. git stash save — “this is a stash save” # 保存一个暂存节点
8.1 git stash list # 暂存列表
8.2 git stash pop | apply # 恢复暂存内容
8.3 git stash drop # 删除暂存区
9. 生成ssh key的步骤,获取带权限的仓库
9.1 cd到~目录, 然后运行:ssh-keygen -t rsa
9.2 运行完成后, 会在/c/Documents and Settings/username/.ssh目录下生成2个文件: id_rsa, id_rsa.pub
9.3 然后把id_rsa.pub文件传给服务器,就可以使用GIT了
10. git add a.html | * # 将文件修改添加到暂存区
11. git commit -m “commitle…” # 提交本地修改,注:未推送到远程
12. git clean -fdx # 清理仓库,对于一些无法提交的提示操作
13. 日志查看相关
13.1 git log –pretty=oneline 文件名 # 查看某个指定文件的提交记录
13.2 git log # 所有提交记录
13.3 git show # 查看具体的修改详情了
13.4 git blame file_name # 先查看某行代码由谁写的,在哪个commit中提交
13.5 git log -p -2 # -p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新
13.6 git log –stat # 仅显示简要的增改行数统计
14. git如何正确回滚代码,强制push远程分支
14.1.首先两步保证当前工作区是干净的,并且和远程分支代码一致
14.2.备份当前分支(如有必要)
14.3. 恢复到指定的commit hash
$ git reset –hard resetVersionHash
14.4. 把当前分支强制提交到远程
$ git push -f origin currentBranch
举个例子,如下代码是合并过后的代码,合并时遇到冲突为,两边同时改动了同一行代码,且两边都同时是增加,那么我们可以使用 , user their’s before mine 选项保留两个更改。这样冲突就不存在了。如果遇到是别人的正确,那么直接 user their’s 就行。
使用 revision graph 可以清楚的看到各个分支的提交和合并情况,让你对整个项目有个直观的感受。