Git学习
2016-01-07 17:04
274 查看
之前工作中一直使用SVN,最近切换到Git。众所周知,Git越来越受到重视,使用场合越来越多,本文主要针对自己Git实践来总结Git的常用命令及在团队如何使用。由于命令及概念用法太多,不可能完全记住且容易忘记。基于此,整理经常使用的命令及相关概念,以便日后查阅之用。
对网络的依赖相对较低。本地修改的代码即使是断网的情况下可以保存到本地仓库,不会丢失。
分布式。每一个Git结点都包含了远程仓库的所有内容,都是一个完整的备份。
ubuntu: apt-get install git
windows下可以安装Cygwin,然后在Cygwin中用apt-cyg install git命令进行安装
当然,也可以从Git官网上自行下载。
dev分支 开发时的主干分支,包含所有将要发布release的代码,该分支主要合并其他功能分支。
feature分支 开发一个新功能分支,一旦开发完成合并到dev分支上,进入下一个release。
release分支 从dev分支创建,完成release后合并到master和dev分支中。
bugfix分支 从master分支创建,一旦修改完成之后,合并到master和dev分支中。
以上仅是针对自己在工作中常用的Git用法进行简单的总结,不足之处,欢迎批评指正。
Git的优势
速度快。不管是同步代码,分支切换,合并分支等速度非常之快。对网络的依赖相对较低。本地修改的代码即使是断网的情况下可以保存到本地仓库,不会丢失。
分布式。每一个Git结点都包含了远程仓库的所有内容,都是一个完整的备份。
Git 安装
使用命令安装
mac: brew install gitubuntu: apt-get install git
windows下可以安装Cygwin,然后在Cygwin中用apt-cyg install git命令进行安装
当然,也可以从Git官网上自行下载。
Git常用命令
#git的配置文件为.gitconfig,在用户主目录下代表是全局配置,在项目目录下代表项目配置 git config --list //显示所有配置信息 git config --global user.name [username] //配置用户名 git config --global user.email [email] //配置邮箱 git config --global alias st status //配置别名git st=git status ssh-keygen -t rsa -C [your email] //生成用户主目录下.ssh文件夹下的id_rsa(私钥) git init //当前目录新建git仓库 git init [dir] //在dir目录下新建git仓库 git clone [url] //将项目从url对应的远程仓库下载到本地 git init + git fetch = git clone git add [file] //将文件添加到暂存区 git add . //将当前目录下所有文件添加到暂存区 git commit -m "提交说明" //将暂存区文件提交到本地仓库,-m参数代表提交说明,必填,提交阅读性 git status //查看仓库当前状态 git log //查看提交日志 git log --pretty=oneline //显示单行日志 git log --graph --pretty=oneline --abbrev-commit //查看合并情况日志 git reflog //查看历史执行git命令 git diff //查看工作目录与暂存区之间的差别 git diff --cached 或git diff --staged //暂存区与上次提交之间的差别,即下次要提交到HEAD的内容 git diff HEAD //工作目录与HEAD的差别 git diff [branch] //当前分支与分支branch的差别 git diff --stat //查看简单的diff结果 git diff sha1 sha2 //查看两个历史版本的差别 注:git diff 输出结果符号意义 --- a/file1 ---代表改动前版本 +++ a/file2 +++代表改动后版本 @@开头 @@结尾 代表一个差异小结 举例:@@ -12,3 + 14,10 @@ 源文件从12行开始的3行与目标文件从14行开始的10行构成了一个差异小结 -代表源文件即改动前的文件,+代表目标文件即改动后的文件 git reset [--soft | --mixed | --hard] [commitID] //恢复提交 git checkout -- [file] //撤消未提交的文件 git reset HEAD [file] //将暂存区的文件撤消到工作区 git branch [-a|-r] //查看分支,当前分支高亮且带*号 -a所有分支,-r远程分支 git branch [branch] //创建分支branch git branch [-d|-D] [branch] //删除分支branch -d:删除 -D:强制删除 git branch -m [oldname] [newname] //分支重命名 git checkout [branch] //切换到分支branch git checkout -b [branch] //创建分支branch并切换到新建分支 git merge [branch] 合并分支branch到当前分支,快进合并 fast-forward git merge --squash [branch] git commit -m "" //压合合并 git cherry-pick [commitID] //多个提交可加-n参数 择选合并 git merge --no-ff -m "提交说明" //禁用fast-forward合并,创建一个新的commit git push [remote] [local branch] : [remote branch] //推送到远程仓库,若省略local branch, 则代表删除该远程分支; 若省略remote branch,则代表上传到远程分支,如果远程不存在该分支,就重新创建 git push origin --delete [branch] //删除该远程分支 git fetch -P //删除没有与远程分支对应的本地分支 git pull [remote] [remote branch]:[local branch] //从远程仓库下载,再与本地分支合并 git fetch //只从远程下载不进行合并,再使用git merge合并 git pull = git fetch + git merge git pull --rebase //从远程仓库下载合并,但与git merge合并不同,git pull如果冲突,修改一次直接提交。合并时会生成一个合并结点。 git pull --rebase解决冲突时需要多次修改提交,合并时不会生成合并结点,分支始终在一条线上,其原理是先将本地的修改存到暂存区, 然后下载远程仓库到本地工作区,最后再把暂存区保存的修改合并到工作区 git pull --rebase = git fetch + git rebase git fetch --all git rest --hard [branch] //放弃本地修改,强制更新 git tag //查看标签 git show [tagname] //查看标签详情 git -a [tagname] -m [说明文字] commitID //在某次commit打上标签 -a:签名 -m:说明 git tag -d [tagname] //删除标签 git push origin [tagname] //推送标签到远程仓库 git push origin --tags //推送所有标签到远程仓库 git push origin : refs/tags/[tagname] //删除远程仓库上的标签
在团队中使用Git
Git中常用分支
master分支 保留最近生产环境代码,也是最近release,该分支只能从其他分支合并,不能直接修改该分支。dev分支 开发时的主干分支,包含所有将要发布release的代码,该分支主要合并其他功能分支。
feature分支 开发一个新功能分支,一旦开发完成合并到dev分支上,进入下一个release。
release分支 从dev分支创建,完成release后合并到master和dev分支中。
bugfix分支 从master分支创建,一旦修改完成之后,合并到master和dev分支中。
分支协调工作
各分支具体协调工作流程如下图所示。由于下图描述的已够清楚,在这里就不在详细阐述。如还有不明白的地方,请告之我。以上仅是针对自己在工作中常用的Git用法进行简单的总结,不足之处,欢迎批评指正。
^_^ ^_^
相关文章推荐
- 让python类的方法或特性变成私有
- IAR version and Crack Downloads
- JPA游离态问题
- css3-动画
- android BroadcastReceiver动态监听网络连接
- 多表连接查询
- Oracle行转列、列转行的Sql语句总结
- php数据库链接
- 安装并配置基于虚拟用户的vsftpd
- MySQL Proxy使用
- Qt 5入门指南之Qt Quick编程示例
- 自定义NSOperation
- @RequestParam-------springMVC
- TCP滑动窗口机制
- Linux Ubuntu 下 apache 配置
- Centos7安装Mysql
- oracle merge into 用法详解
- 在XIB 或者Storyboard 上面 控件的大小,位置都是对的, 但是显示的时候,就不对了 的解决办法
- NSOperation基本操作
- 三种迷宫生成算法