安装
初始化和添加
1.初始化一个Git仓库,使用git init命令。
2.添加文件到Git仓库,分两步:
- 使用命令git add ,注意,可反复多次使用,添加多个文件;
- 使用命令git commit -m “”,完成。
版本管理
版本回退
1.HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb…(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。
git reset --hard HEAD^ 是指回到上一个版本
2.穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
3.要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
4.git status查看git的状态,很常用。
管理修改
- 用git diff HEAD – readme.txt命令可以查看工作区和版本库里面最新版本的区别.
- 每次修改,如果不用git add到暂存区,那就不会加入到commit中。
撤销修改
- git checkout – file :可以丢弃工作区的修改。
- git reset HEAD file:可以把暂存区的修改撤销掉(unstage),重新放回工作区
删除文件
- 用命令git rm删掉,并且git commit。
- 另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:git checkout – test.txt。
远程仓库
添加远程库:
这里添加远程库里面的一些重点列出来:
- 在本地仓库运行 git remote add origin git@github.com:michaelliao/learngit.git将本地仓库与远程仓库相关联。(origin就是远程库的名字,可以自己改一下)
- git push -u origin master(第一次要 -u,其他的时候可以不用):就可以把本地库的所有内容推送到远程库上.
从远程库克隆
- git clone git@github.com:michaelliao/gitskills.git:要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
分支管理
创建与合并仓库
- git branch dev:创建dev分支
- git checkout 命令加上-b参数表示创建并切换,相当于以下两条命令:
$ git checkout -b dev 相当于
$ git branch dev
$ git checkout dev
- git branch:git branch命令会列出所有分支,当前分支前面会标一个*号。
- git checkout master: 切换分支。
- git merge dev:我们把dev分支的工作成果合并到master分支上。
- git branch -d dev:合并完成后,就可以放心地删除dev分支了。
处理冲突
分支管理策略
Bug分支
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
廖雪峰老师带你学
Feature分支
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。
多人协作
多人协作的工作模式通常是这样:
- 查看远程库信息,使用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,如果有冲突,要先处理冲突。
- 如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。
标签管理
创建标签
- 命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
- 命令git tag -a <tagname> -m "blablabla…"可以指定标签信息;
- 命令git tag可以查看所有标签。
注意:标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。
操作标签
- 命令git push origin <tagname>可以推送一个本地标签;
- 命令git push origin --tags可以推送全部未推送过的本地标签;
- 命令git tag -d <tagname>可以删除一个本地标签;
- 命令git push origin :refs/tags/<tagname>可以删除一个远程标签。
使用Github
-
在GitHub上,可以任意Fork开源仓库;
-
自己拥有Fork后的仓库的读写权限;
-
可以推送pull request给官方仓库来贡献代码。
自定义Git
忽略特殊文件
- 忽略某些文件时,需要编写.gitignore;
- .gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
如果不太懂,戳我.