一、快速入门
本地初始化一个项目
首先,你需要执行下面两条命令,作为 git 的基础配置,作用是告诉 git 你是谁,你输入的信息将出现在你创建的提交中。
git config --global user.name "你的名字或昵称" git config --global user.email "你的邮箱"
然后在你的需要初始化版本库的文件夹中执行:
git init git remote add origin <你的项目地址> //注:项目地址形式为:http://git.oschina.net/xxx/xxx.git或者 [email protected]:xxx/xxx.git
这样就完成了一次版本你的初始化。
如果你想克隆一个项目,只需要执行:
git clone <项目地址>
完成第一次提交
进入你已经初始化好的或者克隆项目的目录,然后执行:
git pull origin master <这里需要修改/添加文件,否则与原文件相比就没有变动> git add . git commit -m "这是我第一次提交的说明" git push origin master
然后如果需要账号密码的话就输入账号密码,这样就完成了一次提交。
二、基本命令
获取与创建项目
git init #用 git init 在目录中创建新的 Git 仓库
git clone 项目地址 #使用 git clone 拷贝一个 Git 仓库到本地
默认情况下,Git 会按照你提供的 URL 所指示的项目的名称创建你的本地项目目录。 通常就是该 URL 最后一个 / 之后的项目名称。如果你想要一个不一样的名字, 你可以在该命令后加上你想要的名称。
基本快照
添加快照:
git add #可将该文件添加到缓存
我们可以使用 git add . 命令来添加当前项目的所有文件。当你要将你的修改包含在即将提交的快照里的时候,需要执行 git add。
查看快照信息:
git status #列出当前目录所有还没有被git管理的文件和被git管理且被修改但还未提交(git commit)的文件,-s参数可简化显示
git diff #显示已写入缓存与已修改但尚未写入缓存的改动的区别
- 尚未缓存的改动:git diff
- 查看已缓存的改动: git diff --cached
- 查看已缓存的与未缓存的所有改动:git diff HEAD
- 显示摘要而非整个 diff:git diff --stat
组合起来用就是,git status 显示你上次提交更新后的更改或者写入缓存的改动, 而 git diff 一行一行地显示这些改动具体是啥。
提交快照:
git commit #将缓存区内容添加到仓库中,最好使用 -m 选项以在命令行中提供提交注释
如果你觉得 git add 提交缓存的流程太过繁琐,你也可以用git commit -a参数跳过这一步。
阻止某个快照上传:
git reset HEAD --文件 #用于取消已缓存的内容
简而言之,执行 git reset HEAD 以取消之前 git add 添加,但不希望包含在下一提交快照中的缓存。
删除快照:
git rm <file> #从已跟踪文件清单中移除
如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
git rm -f <file>
如果把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可
git rm --cached <file>
递归删除整个目录中的所有子目录和文件
git rm –r *
移动快照:
git mv #用于移动或重命名一个文件、目录、软连接
查看配置的远程仓库
git remote #查看当前配置有哪些远程仓库
提取远程仓库的跟新
git fetch #从远程仓库下载新分支与数据,该命令执行完后需要执行git merge 远程分支到你所在的分支。
git merge #从远端仓库提取数据并尝试合并到当前分支,在下面分支管理还会提到
假设你配置好了一个远程仓库,并且你想要提取更新的数据,你可以首先执行 git fetch [alias] 告诉 Git 去获取它有你没有的数据,然后你可以执行 git merge [alias]/[branch] 以将服务器上的任何更新(假设有人这时候推送到服务器了)合并到你的当前分支。
三、分支管理
创建分支:
git branch (branchname)
切换分支:
git checkout (branchname)
当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。
列出分支:
git branch
删除分支命令:
git branch -d (branchname)
分支合并命令:
git merge (branchname)
四、历史记录
git log #列出历史提交记录
git log --oneline #查看历史记录的简洁的版本
git log --oneline --graph #查看历史中什么时候出现了分支、合并
git log --reverse --oneline #逆向显示所有日志
git log --author=用户名 --oneline -5 #查找指定用户的提交日志,看5条
git log --oneline --before={3.weeks.ago} --after={2017-12-12} --no-merges #查看3周前且在12月12日之后的所有提交,--no-merges 选项以隐藏合并提交
五、标签
git tag -a v1.0 #创建v1.0的标签
-a 选项意为"创建一个带注解的标签"。 不用 -a 选项也可以执行的,但它不会记录这标签是啥时候打的,谁打的,也不会让你添加个标签的注解。 我推荐一直创建带注解的标签
git tag #查看已有标签
git tag -d v1.1 #删除v1.0的标签
git show v1.0 #查看此版本所修改的内容
/* Git有commit,为什么还要引入tag? "请把上周一的那个版本打包发布,commit号是6a5819e…" "一串乱七八糟的数字不好找!" 如果换一个办法: "请把上周一的那个版本打包发布,版本号是v1.2" "好的,按照tag v1.2查找commit就行!" 所以,tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。 */
六、http(s)方式如何自动记住密码
https 方式每次都要输入密码,按照如下设置即可输入一次就不用再手输入密码的困扰而且又享受 https 带来的极速
按照以下设置记住密码十五分钟:
git config --global credential.helper cache
如果你想自定义记住的时间,可以这样:
git config credential.helper ‘cache --timeout=3600‘ //这里记住的是一个小时,如需其他时间,请修改3600为你想修改的时间,单位是秒
你也可以设置长期记住密码:
git config --global credential.helper store
或修改仓库的地址带上你的账号密码
http://yourname:[email protected]/name/project.git //注意,当使用邮箱时,请对@符号使用%40替换
如果你原本使用的 ssh 地址想更换成 http(s) 地址,可以执行以下命令:
//删除原本的ssh仓库地址 git remote rm origin //origin 代表你原本ssh地址的仓库的别名 //新增http地址的仓库 git remote add origin http://git.oschina.net/username/project.git
七、版本回退
回退远程仓库的版本
先在本地切换到远程仓库要回退的分支对应的本地分支,然后本地回退至你需要的版本,然后执行:
git push <仓库名> <分支名> -f
以当前版本为基础,回退指定个commit
首先,确认你当前的版本需要回退多少个版本,然后计算出你要回退的版本数量,执行如下命令
git reset HEAD~X //X代表你要回退的版本数量,是数字!!!!
需要注意的是,如果你是合并过分支,那么背合并分支带过来的 commit 并不会被计入回退数量中,而是只计算一个,所以如果需要一次回退多个 commit,不建议使用这种方法
回退到和远程版本一样
有时候,当发生错误修改需要放弃全部修改时,可以以远程分支作为回退点退回到与远程分支一样的地方,执行的命令如下
git reset --hard origin/master // origin代表你远程仓库的名字,master代表分支名