在现在的工作开发中,一般都会使用版本控制来协同开发,在此我讲述Git的的日常使用。(本教程只针对工作不久的小白或者没有进行团队多人开发的成员)
1、Git基本操作
1.1 克隆代码
1.1.1 代码克隆
git clone -b remote-branch-name url/project-name
解析:
remote-branch-name -> 后跟你要拉取的远程分支名
url -> 可以使ssh或者https的地址
project-name ->指你要拉取的工程名
例如拉取retrofit代码
git clone -b master https://github.com/square/retrofit.git
master分支是默认分支,你也可以指定其它分支名称
1.1.2 用SourceTree拉取远程代码
复制下面选中的URL,打开SourceTree
SourceTree如图
点击“克隆/新建” ,将项目Url粘贴在下图的源路径/URL中,下面就可以Clone代码了
1.2、提交代码
如果你开发了一个功能,想要将你的代码提交到本地仓库,你可以使用git status命令 查看你添加了那些文件以及以及修改的文件和删除掉的文件。
添加单文件到Git文件管理中用 "git add <file>"
git add hotel/src/com/tuniu/globalhotel/activity/NewActivity.java
添加所有改动的文件到文件系统中
git add . 或者 git add --all
如果有文件改错了或者误删除 “git checkout -- <file>...”,
git checkout -- hotel/src/com/tuniu/globalhotel/activity/GHotelOrderFillActivity.java
确认无误后,使用git commit -m "日志"
git commit -m "测试测试"
1.3 提交错误,代码回退
回退使用git reset 命令
git reset --mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息
git reset --soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
git reset --hard:回退到某个版本,在此次提交后的代码丢弃掉
你可以这么理解:
git reset --hard commit-id 重置代码到你指定的位置,同时删除在它之后你提交的代码
git reset --mixed和soft 也重置到你指定的代码,但是会保留你修改的代码
如果不小心用了git reset --hard命令,又想查看自己又修改的代码,可以使用 git reflog 命令
查看你想要回退的版本,可以再次使用git reset命令回退到指定版本,重新进行reset操作或者使用git cherry-pick <commit-id> 将指定提交内容合并到当期分支上。
1.4 推代码到远程
git pull --rebase origin dev #拉取远程分支最新的代码
git push origin dev #将当前代码推送到远程
将本地代码推送到远程dev分支上
1.5 提交服务器代码出现问题
如果提交到服务端的代码出现问题时
git revert + commitid
重新执行1.4 的操作
2 团队协作之gerrit
在实际开发中,很多都是团队共同开发,用户的代码提交并不会直接提交到仓库中,而是会提交一个类似中转站的地方,让团队其他成员review你的代码,防止发生一些低级的错误。
团队作战室,在push之前要先进行git pull 操作!!!
团队作战室,在push之前要先进行git pull 操作!!!
团队作战室,在push之前要先进行git pull 操作!!!
重要的事情说3遍。
2.1 推送代码
git pull --rebase origin dev # 拉取远程分支,同时本地和远程进行rebase操作,你可以看做merge,效果上基本相同
git push origin HEAD:refs/for/dev #dev 就是你远程分支名称
如果没有冲突,当前一次提交就OK了。
2.2 修改同事Review出来的问题
同事review你的代码发现你的代码有问题,会给你指出来,你需要进行解决然后重新push代码。
修改代码后,使用追加的方式进行commit,防止生成多个commit-id
git status
git add .(或者git add –all防止有删除的东西为提交) # 保存改动
git commit --amend #以追加的方式将改动的代码,添加到最后一次的提交代码中
git pull --rebase origin dev
git push origin HEAD:refs/for/dev
在弹出的对话框中你可以修改提交日志,也可以继续使用上一次的提交日志
如果使用Sourcetree提交你的改动的话,在它的提交-右下角的“提交选项”下拉框中-选择“修改最后一次提交”
上图也是以追加的方式进行提交,这样在你push时,会与gerrit上的提交保持同步不会出现多次的commit-id.
2.3 合并多个本地的多次commit
假设要合并最后的2个提交,可以按如下命令进行:
git rebase –i HEAD~2
使用该命令,你会进入一个交互式的界面,显示了最后两次提交,并且询问你要压缩哪些。
将第二个pick修改为squash或者s,然后输入":wq”退出。
这时git会自动第二个提交合并到第一个中去。并提示输入新的message(就是我们常说的comments),
编辑输入新的message,然后输入":wq"退出,
此时本地的(HEAD中)最后两次提交已经被合并为一个。git log可以查看。
如果需要提交到远端,运行git push --force origin master即可。
3 暂存代码
如果一个功能开发完了,在提交之前可以执行stash命令,对当前的代码进行保存,保存后可以执行pull命令,防止本地代码和远程代码冲突
git add --all
git stash save "your feature"
代码显示贮存代码列表
sourcetree 贮藏列表
git stash save stash@{0} #应用贮存代码
git stash drop stash@{1} #删除贮存代码
4 删除多余分支
git branch -D git-test # git-test是分支名