使用SourceTree和Git Bash 命令共同完成提交代码,SourceTree只是用来先add,commit到本地local分支,剩下的用Git Bash来完成。下面详解说我从接触Git到现在,我的提交用法,但是我不知道Git的本质,有时间一定要学习,下面的提交流程是没有问题的:
1. 第一次使用git环境一般应该配置你的用户信息,这样会方便别人与自己查看git提交代码记录。
配置用户信息:记得当时给开了一个LDAP账户。
2.第一次初始配置
第一次取出代码到本地需要克隆代码(从服务器取代码到本地),一般如果新建一个本地代码库都需要重新克隆一次代码。
clone步骤:
第一步:打开Git Bash,进到相应目录,比如:/C/work_space
第二步:输入以下命令到Git Bash中,等到100%就可以了。比如:
git clone ssh://xxxx@gerrit.bj.xxxx.com:29418/face_liveness_app && scp -p -P 29418 xxxxx@gerrit.bj.xxxx.com:hooks/commit-msg face_liveness_app/.git/hooks/(一段网址)
如何获取上述网址:在浏览器上输入网址10.0.0.8,Sign In登录上去(用户名:qinll1235 密码:a12_35)----->Projects--->List---->选择你要clone的工程(face_liveness_app),点进去---->选择标签“clone with commit-msg hook”--->复制其下面的git clone ssh:.......串,到Git Bash中,回车,直到clone完之后就行了。
第三步:
cd face_liveness_app 切换目录(face_liveness_app :下载的工程名字)
git branch local 建立本地local分支
3. 重新克隆代码:
今天(2015.3.12)一上班我就先拉(pull)代码,但是在pull之前执行git checkout master时报无法找到.git文件,后来我就删掉文件夹,重新clone.clone过程如下:
第一步:10.0.0.8,-----登录----Projects------>List---->找到要clone的工程,点进去---->看到有一个串:git clone ssh://qinll1235@gerrit.bj.xxxx.com:29418/face_liveness_app------>在Git base命令行中,进到要存放clone下来的工程的地方(我这是:C盘下面的work_space)------>输入刚才查找到的串:git clone ssh://xxxxxx@gerrit.bj.xxxxx.com:29418/face_liveness_app然后回车,代码就下载到本地了------>然后进到工程里面:cd face_liveness_app,此时发现在master分支上------->git branch local 创建local分支----> git checkout local切换到local分支就可以了。
4 . Git提交流程:(本地有local和master两个分支,远程仓库是origin)
(1)add,commit (把本地修改commit到local分支)
【add ,在哪? Sourcetree 选择“添加”而不是“添加/删除”】
【Commit: 对应到Sourcetree,在右上角的第二个按钮“提交”,就可以了。】
注意:增加文件或修改文件对于git来说,都需在该文件上右击Add,然后commit,写注释message(用英文写注释),此时是提交到local上。(bin和gen等自动生成的不用提交)
(2)pull代码(下载服务器最新的代码到本地master分支上)
(2.1)git checkout local 切换到local分支
(2.2)git status 查看下本地状态,这样可以知道是否有修改过的文件没有提交
(2.3)git checkout master 切换到master分支(pull代码之前要切换到master分支上)
(2.4)git pull (把服务器上的最新代码更新到master上)。注意:是git pull 不是 git pull master.
git pull origin master(如果远程有多个仓库,要指明从哪个仓库的哪个分支拉取代码)
(2.5)git checkout local 切换到local分支
(2.6)git rebase master ( 注意:pull代码之后,一定要rebase:把master上别人新加的东西,加到local分支上,这样local分支和服务器保持同步。如果不rebase,只是pull的话,local分支上的代码不能保证是最新的)
注意:更新完之后,最好运行一遍,然后在push
(3)push(把local分支推上去) 此时是在local分支上
(3.1)git push origin head:refs/for/master 先提交到待审核的分支。
(3.2)review
(3.2.1)注意:提交完之后一定要及时review,否则sourcetree不显示此次提交记录 。
(3.2.2)自己可以给自己review.
(3.3)再重新pull一遍代码,然后就显示orign/master origin/HEAD master local。如果没有重新pull
注意:push完之后,不用把本地local分支修改的代码加到本地的master上。因为下次pull代码时把最新的代码pull到master上了。
git log: 检查成功是否push到服务器。
提交代码时: sourcetree和git命令行结合使用。
5 .review代码:(自己可以给自己review)
10.0.0.8打开这个url,------>登录--->All----->Open---->选中要review的项目--->Reply...
----->方块里不用写任何信息,方块下面的Code-Review选择+2, Verified选中+1----->Post-->Submit 就OK了
6. git rebase master: rebase过程中产生冲突,解决方法:
注意:这里的冲突类型是:两个用户修改了同一个文件的同一块区域
第一步:最简单的编辑冲突的办法,就是直接编辑冲突了的文件,把冲突标记删掉,把冲突解决正确。
第二步:编辑完冲突文件之后,对于冲突文件不用提交,只点击“添加”(Sourcetree,不用点击”提交”),此时在bash命令行上输入命令git status,显示绿色,表示已经把修改的冲突文件加到缓存里了,然后在git rebase --continue。
在git rebase --continue的过程中可能会出现:rebase到1/3产生报冲突,此时再执行git rebase --continue,执行过程中可能还会报冲突,解决完冲突再git rebase --continue,直到rebase完成,然后再push就可以了。
冲突解决完之后,不用提交,只点击“添加”(Sourcetree,不用点击”提交”),在bash命令行上,然后在git rebase --continue
最简单的编辑冲突的办法,就是直接编辑冲突了的文件,把冲突标记删掉,把冲突解决正确。
7. Pull代码时,没有rebase造成的后果是:
完了之后,一定要查看代码,确认已更新下来代码(有时git pull显示成功,但查看时有一部分更新下来,但有的没有更新下来,此时采取两种方法,第一:重新拉代码,第二:重新导入或打开eclipse或AndroidStudio,这样反复试了好几次才在androidstudio中查看到所有更改的代码)。
(*)没更新下来(确定),因为查看本地目录下的文件也没有新添加的代码(不是用androidstudio查看)。
第一次没有更新下来。第二次,git pull时,虽然显示Already up-to-date,但此时查看本地已添加新的代码。
8.
使用sourecetree,来执行rebase操作:在local上双击,就切换到local分支了。此时是在local分支上,然后在master上右键,选择“将当前变更变基到master” ???什么意思
add ,commit: 提交到本地local分支时
以下方法不建议使用,容易在master分支上add,commit,使用此方法时一定要确保现在是在local分支上:
建议使用命令行,进行add 和 commit,命令如下:
git add readme.txt : 用命令git add告诉Git ,把文件添加到仓库:
git commit -m "message”:
git commit -m 参数后面跟字符串,告诉Git本次修改的说明信息
9. 删除:
直接右键---删除(不是TortoiseGit/Delete),然后右键---Git Commit -->”local”...
然后再用Git Bash(不是命令行),用命令行提交代码
如何调出Git Bash窗口: 点击屏幕左下角图标,找到Git Bash。
10.(10.1)新添加一个remote server: gitlab,目前服务器上有两个origin和gitlab,push代码时要指定push到origin还是gitlab(不用review)。
(10.2)在本地建立facesign1.1分支,并把此分支推到gitlab上。
(10.3)第一次pull时,报key错误,重新添加key就可以了。
(10.4)pull代码:如果是在facesign1.2_dev分支上
git pull gitLab facesign1.2_dev
完整的命令是:git pull gitLab facesign1.2_dev:facesign1.2_dev
从远程gitLab仓库的facesign1.2_dev分支上拉代码到本地的facesign1.2_dev分支上,如果在本地facesign1.2_dev分支上,那么:facesign1.2_dev就可以省略了。
(10.5)git push origin master 提交时指明提交到远程的哪个仓库的哪个分支上。