标签:source pos 方法 ges web merge tor reads 保存
接触git只有不到一年的时间,可以说比大多数人起步都晚。那会还沉浸在自己的舒适圈里面,进公司就用着perforce,一用就快7年,觉得自己会用一个SCM就行了,捧着不放,也不想去接触别的SCM。
直到去年公司一个新的项目开启,时程很赶,然后我也被拉进项目组。编程语言用的是PHP,framework是Laravel,SCM是git。刚听到的时候,我……一.NET程序员,现在让我来搞php,还是从来没接触过的,心想没搞错吧,可是是大老板安排的,抵触也没用,然后就被逼接触到了php,接触到了git。
如果说perforce带给我的感觉是迈腾,git就是S级大奔,如果现在让我从新再选一次,我会毫无疑问选择git,差距就是这么大,再加上当今最大的代码托管平台GitHub,git作为当今最强大的分布式SCM,当之无愧。
参考官网https://www.git-scm.com/
在windows上的童鞋下载打包好的集成环境即可:https://www.git-scm.com/download/win
Git flow有很多,从简单到复杂,没有绝对的标准,选择适合自己的就好:
如果是第一次获取,用git clone指令,代码仓库都有一个地址,比如git@code.aliyun.com:ypzc/first-web.git
git clone git@code.aliyun.com:ypzc/first-web.git
如果是获取远程最新代码,用git pull指令,下面指令获取远程master的最新代码到当前分支
git checkout master
git pull origin master
无论是开发功能或者修复bug,均从master分支开始:
git checkout master
git pull origin master
git checkout -b training
git checkout -b相当于执行两条指令:
git branch training
git checkout training
branch创建好之后,就要开始修改code了,比如新增try-git.md文件:
# I like git very much
此时可以用git status指令查看工作区有哪些文件有修改:
$ git status On branch training Your branch is up-to-date with ‘origin/training‘. Untracked files: (use "git add <file>..." to include in what will be committed) try-git.md nothing added to commit but untracked files present (use "git add" to track)
git已经很聪明的提醒我们,没有被跟踪的文件列表,并告诉我们用git add指令去追踪它
$ git add try-git.md
再次用git status查看状况
$ git status On branch training Your branch is up-to-date with ‘origin/master‘. Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: try-git.md
提示有修改需要提交,是不是有点晕了,刚刚我们下的git add干嘛去了。。。
这里需要介绍一下git的精华,工作区和暂存区。
工作区是指当前正在编写的源代码目录,我们修改任何一个文件,都是在工作区进行。
git add指令是将我们在工作区对文件做的修改放入暂存区,相当于一个快照,之后可以继续对该文件进行修改,但暂存区里面保存了该文件上一次放进去的样子。
git是分布式SCM,所以每个工作区Local都有一个对应的代码仓库Repository,在一个文件git add之后,只是告诉git要对此文件进行版本控管,需要继续下指令git commit,把文件提交到本地版本库
$ git commit -m "first add file" try-git.md 1 file changed, 1 insertion(+) create mode 100644 try-git.md
再次运行git status
$ git status
On branch training
nothing to commit, working tree clean
世界清静了。
到目前为止,对git的操作只是在本地进行,需要把对代码的修改推到远端仓库,其他人才能看到你修改后的代码
$ git push origin training Counting objects: 3, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 307 bytes | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) remote: remote: To create a merge request for training, visit: remote: xxxxx remote: To xxxxx * [new branch] training -> training
假如training分支代表一个新的功能,此时这个功能的代码还不在master分支中,一般情况下,部署到线上环境的code是从master分支来,所以training分支开发的功能,需要merge到master分支才行。目前很多CI环境都支持发pull/merge request,这个动作会在CI系统上手动执行,拿阿里code举例子:
执行之后,reviewers会收到通知信,查看代码,顺利的话,代码会自动marge到master分支上,如果遇到另外一个开发人员同时也修改了try-git.md文件,此时可能会产生冲突,所以建议在push到远程仓库之前,先将master分支上最新的code marge到当前分支:
$ git pull --rebase origin master CONFLICT (content): Merge conflict in try-git.md
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,此时打开try-git.md文件,可以看到类似
<<<<<<< HEAD # Git is so powerful! ======= # I like git very much >>>>>>> feature1
手动调整为:
# Git is so powerful!
# I like git very much
调整好之后,用git add提交到暂存区,然后执行git rebase --continue,再push到远程
$ git add try-git.md $ git rebase --continue $ git push origin training
另外有一些文件不希望让git来追踪,可以在工作区根目录的.gitignore文件中说明,语法百度。
git diff默认提供的功能比较难以阅读,可以利用第三方tool来,这里比较推荐suorcetree,官网:https://www.sourcetreeapp.com/,注册之后可以免费试用。
如果官网下载很慢,也可以从百度盘下载:
http://pan.baidu.com/s/1pLS4W7D
标签:source pos 方法 ges web merge tor reads 保存
原文地址:http://www.cnblogs.com/windchen/p/6290685.html