安装
linux ubuntu :sudo apt install git
windows: 从官网下载安装程序,然后一直下一步
MacOs: homebrew安装或者使用Xcode自带的git
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
mark@ubuntu:~$ git config --global user.name "mark"
mark@ubuntu:~$ git config --global user.email "markzhou2015@163.com"
创建版本库
第一步:创建文件夹
mark@ubuntu:~$ mkdir local_repository
mark@ubuntu:~$ cd local_repository/
mark@ubuntu:~/local_repository$ pwd
/home/mark/local_repository
第二步:通过git init
命令将目录变成Git可以管理的仓库
mark@ubuntu:~/local_repository$ git init
已初始化空的 Git 仓库于 /home/mark/local_repository/.git/
文件夹中生成的.git目录中包含git管理仓库所需的文件
git init
命令也可以在包含文件的目录中使用,并不一定要新建目录
将文件添加到版本库
git add <file>
git commit -m "xxx"
git add 可以添加单个文件,也可以添加目录,可以多次执行add操作,最后统一commit
git commit 命令的参数 -m "提交说明",建议提交时写上说明
版本库管理
常用命令
git status
可以查看当前仓库状态,如果仓库中的文件有修改但未add到缓存区,或者add之后未commit都是可以看到的git diff <file>
查看文件的修改情况git log --pretty=oneline
可以查看提交日志git reflog
可查历史提交日志
mark@ubuntu:~/local_repository$ git log --pretty=oneline
e71476c39304da3242ea165e2d469f2a2e06e8e1 (HEAD -> master) commit 4
e8a41824ccdb783b2d7f37cdf4abcb751cac3cfd commit 3
ea93adb3526362058c474ac38cf865dcef792754 commit 2
9e85fcfe58ace4653c439b63246df41930819849 20181223
e71476c39304da3242ea165e2d469f2a2e06e8e1 这样的内容是sha1计算出来的commit_id
用
git diff HEAD -- <file>
命令可以查看工作区和版本库里面最新版本的区别
版本回退
在Git中,用
HEAD
表示当前版本,也就是最新的提交1094adb..,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
git reset --hard commit_id
可以切换版本
git reset --hard HEAD^
不使用commit_id也可以用HEAD^方式回退版本,但是回退之后想回到最后提交的版本,需要使用 git reflog
找到commit_id
管理修改
git checkout -- <file>
放弃工作区的修改,实际上是将版本库中的版本copy到工作区中git reset HEAD <file>
放弃暂存区的修改,即放弃addgit reset --hard HEAD^
回退版本,即放弃commit
删除文件
如果使用rm
直接删除git版本库中的文件,并不能删掉,需要git rm <file>
之后再git commit -m ""
才能真的从版本库中删掉文件
如果删错了,想恢复,可以git checkout -- <file>
远程仓库
ssh-keygen -t rsa -C "youremail@example.com"
mark@ubuntu:~/Repository$ git remote add origin git@github.com:ocarinaAC/simpleGit.git
关联远程仓库
git push -u origin master
本地推送到远程master分支
mark@ubuntu:~/Repository$ git clone git@github.com:ocarinaAC/simpleGit.git
克隆远程仓库
mark@ubuntu:~/Repository/simpleGit$ git pull
从远程仓库pull到本地
分支管理
git branch 列出当前所有分支
git branch <branch name> 创建一个分支
git checkout <branch name> 切换分支
git checkout -b <branch name> 创建并切换到新分支
git merge <branch name> 将指定分支合并到当前分支
git branch -d <branch name> 删除分支
合并分支时,加上
--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward
合并就看不出来曾经做过合并。
解决冲突
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用
git log --graph
命令可以看到分支合并图。
暂存工作区
当手头工作没有完成时,先把工作现场
git stash
一下,然后去修复bug,修复后,再git stash pop
,回到工作现场。工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用
git stash apply
恢复,但是恢复后,stash内容并不删除,你需要用git stash drop
来删除;另一种方式是用
git stash pop
,恢复的同时把stash内容也删了:你可以多次stash,恢复的时候,先用
git stash list
查看,然后恢复指定的stash,用命令:$ git stash apply stash@{0}
标签管理
- 命令
git tag <tagname>
用于新建一个标签,默认为HEAD
,也可以指定一个commit id; - 命令
git tag -a <tagname> -m "blablabla..."
可以指定标签信息; - 命令
git tag
可以查看所有标签。 - 命令
git show <tagname>
可以查看标签的具体信息。 - 命令
git push origin <tagname>
可以推送一个本地标签; - 命令
git push origin --tags
可以推送全部未推送过的本地标签; - 命令
git tag -d <tagname>
可以删除一个本地标签; - 命令
git push origin :refs/tags/<tagname>
可以删除一个远程标签。
团队协作
- 查看远程库信息,使用
git remote -v
; - 本地新建的分支如果不推送到远程,对其他人就是不可见的;
- 从本地推送分支,使用
git push origin branch-name
,如果推送失败,先用git pull
抓取远程的新提交; - 在本地创建和远程分支对应的分支,使用
git checkout -b branch-name origin/branch-name
,本地和远程分支的名称最好一致; - 建立本地分支和远程分支的关联,使用
git branch --set-upstream branch-name origin/branch-name
; - 从远程抓取分支,使用
git pull
,如果有冲突,要先处理冲突。