(1)安装Git
1、Linux下
先运行git看看当前有没有安装,大多数Linux会有很友好的提示信息告诉你安装Git的命令。比如Debian或Ubuntu Linux,通过一条sudo apt-get install git就可以安装,比较老的版本则运行sudo apt-get install git-core。
2、Windows下
直接在官网下载安装程序https://git-scm.com/downloads。按照默认安装,安装完成后在安装目录打开git-bash.exe(一个命令行工具)即可直接操作Git。
安装完成后运行
git config --global user.name "your name"
git config --global user.email "[email protected]"
全局设置用户名和e-mail
(2)常用命令
常规操作
git init 初始化一个仓库
git add <file> 将修改添加到暂存区,可同时添加多个
git rm <file> 提交一个删除文件操作到暂存区
git commit 提交
git status 查看工作区状态
git diff 查看修改内容
git reset --hard commit_id 切换版本,HEAD指向当前版本,HEAD^指向上个版本,HEAD^~20前二十个版本
git log 查看提交历史
git reflog 查看命令历史(切换打未来版本是用于查看未来版本的commit_id)
git checkout -- file 丢弃工作区的修改
git reset HEAD file 丢弃暂存区的修改
远程库操作
git remote add <自定义仓库名> [email protected]:path/repo-name.git SSH方式关联一个远程库
git push -u origin <本地分支名> 关联后,第一次推送master分支的所有内容,第一次推送后,后面的推送可以去掉 -u 参数,-u相当于--set-upstream 另外,第一次从远程仓库clone后,远程仓库的分支与本地分支的关联性默认是按照同名分支来关联的。当在这些分支上开发并push的时候,默认push到同名分支。当在本地新建了一个远程库不存在的分支时,第一次推送该分支到远程库需要加上这个参数。这时候会在远程库新建同名分支并推送代码,并将两个分支关联起来。
git branch --set-upstream <本地分支名> origin/<远程分支名> 建立本地分支与远程分支的关联关系
git checkout -b <本地分支名> origin/<远程分支名> 将远程库里的指定分支拉取到本地(本地不存在该分支),该操作将会在本地新建一个分支并与远程库的该分支关联起来,本地分支名最好与远程分支名保持一致。
git pull <远程库名> <远程分支名>:<本地分支名> 从远程库获取某个分支的更新,并与本地指定分支进行快速(fast_forward,不会留下记录)merge,如果与本地当前分支merge,则冒号后面的内容可以省略,当push时,远程分支的内容比本地新的时候,也需要执行本操作。
git fetch <远程库名> <远程分支名>:<本地分支名> 从远程库获取代码,与pull不同的是,不会自动merge,因此fetch到一个已经存在的分支时会报错
git clone [email protected]:path/repo-name.git 克隆一个仓库
git clone https://github.com/<user-name>/<repo-name>.git 这种格式为https协议的方式,Git支持多种协议,SSH协议的速度快
分支操作
git branch 查看分值,带 * 表示当前分支
git branch <name> 创建分支
git checkout <name> 切换分支
git checkout -b <name> 创建并切换分支
git merge <name> 合并某分支到当前分分支
git branch -d <name> 删除分支,删除一个没有合并过的分支使用-D属性
git log --graph 查看分支合并图
git log --graph --pretty=oneline --abbrev-commit 查看简洁的分支合并图
git merge --no-ff -m "****" <branch> --no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward
合并就看不出来曾经做过合并。禁用fast forward后Git就会在merge时生成一个新的commit,所以需要 -m 添加备注信息。
* git stash 把当前工作现场“储藏”起来,包括工作区和暂存区没有commit的所有内容
git stash list 查看“储藏”的工作目录列表
git stash apply 恢复到指定的工作目录
git stash drop 删除指定的工作目录
* git stash pop 从“储藏”的工作取出最近的工作目录,并删除,相当于上面两条命令
标签管理
git tag <tag_name> 在当前分支打一个新标签
git tag 查看所有标签
git tag <tag_name> <commit_id> 在指定commit处打一个标签
git tag -a <tag_name> -m <comment_content> <commit_id> 创建一个带说明的标签
git show <tag_name> 查看标签详细信息
git tag -d <tag_name> 删除本地标签
git push <仓库名> :/refs/tags/<tag_name> 从远程仓库删除指定标签
git push <仓库名> <tag_name> 推送指定标签到远程仓库
git push <仓库名> --tags 一次性推送所有尚未推送的标签
多人协作
查看远程库信息 git remote -v
本地新建的分支如果没有推送到远程,对别人是不可见的。
从本地推送分支使用 git push origin <本地分支名> ,如果推送失败,使用 git pull 抓取远程的新提交,如有冲突,先解决冲突,如果提示no tracked则表示本地分支没有与远程建立关联,直接添加 -u 参数或者 git branch --set-upstream <本地分支名> <远程库名>/<远程分支名> 建立关联。
从本地创建远程仓库对应的分支,使用 git checkout -b <本地分支名> <远程库名>/<远程分支名>