您的位置:首页 > 其它

Git学习

2016-01-07 17:04 274 查看
之前工作中一直使用SVN,最近切换到Git。众所周知,Git越来越受到重视,使用场合越来越多,本文主要针对自己Git实践来总结Git的常用命令及在团队如何使用。由于命令及概念用法太多,不可能完全记住且容易忘记。基于此,整理经常使用的命令及相关概念,以便日后查阅之用。



Git的优势

速度快。不管是同步代码,分支切换,合并分支等速度非常之快。

对网络的依赖相对较低。本地修改的代码即使是断网的情况下可以保存到本地仓库,不会丢失。

分布式。每一个Git结点都包含了远程仓库的所有内容,都是一个完整的备份。

Git 安装

使用命令安装

mac: brew install git

ubuntu: 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用法进行简单的总结,不足之处,欢迎批评指正。
^_^ ^_^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: