GIT学习笔记
1、git 安装 以及初始配置
- 安装
sodu apt-get install git - 配置
$ git config --global user.name "jacklin"
$ git config --global user.email 361525737@qq.com
2、创建版本库
-
创建版本库(仓库)文件
mkdir jacklingit //创建git文件夹 cd jacklingit // 打开 pwd // 查看当前目录
-
通过 git init 命令把这个目录编程可以管理的仓库
$ git init Initialized empty Git repository in /Users/michael/learngit/.git/
这个时候当前目录多了一个.git的文件,这个目录是Git来跟踪管理版本库的,不能手动修改。
-
现在编写一个test.txt的文件放到jacklingit目录下,并通过git.add告诉git,把文件添加到仓库,然后通过git commit命令告诉git 把文件提交到仓库。
$ git add test.txt $ git commit -m "wrote a test file"
这里的 commit -m 中 -m后面跟的是说明性质文字,可以是任意内容,但最好是有意义的。为什么需要add和commit 两步?因为 一次性可以commit多个文件,可以多次添加,一次提交。
3、修改记录
假如现在对test.txt进行部分修改
-
用git status查看修改状态,用 git diff 来查看具体做了哪些改动
$git status $git diff
看到具体改动之后我们才可以放心提交
- 想开始一样,用 git add 和 git commit 添加和提交
4、版本回退
-
git log 命令显示由近到远的版本日志,包括时间、日期、作者等,如果想查看精简版本 可以使用 git log --pretty=oneline 命令
$git log $git log --pretty=oneline
-
假如这个文件提交过100次,那就有100个版本,使用git reset命令退回到指定版本
$ git reset --hard HEAD^ //退回到上一个版本 $ git reset --hard HEAD^^ //退回到倒数第二个版本 $ git reset --hard HEAD~50 //退回到往前数50个版本
然后通过 cat test.txt来查看当先版本是否时候操作后的版本
这个时候通过 git log命令来查看版本日志,发现版本记录也彻底回到了原来50版本对应的日志,那么如何再退回到没有进行版本退回之前的最新版本?假如操作窗口还没有关闭,往上找到最新版本的版本号,假如是00000,执行 git reset --hard 00000
$ git reset --hard 00000假如连commit id 也找不到怎么办? git reflog 命令可以查看你的每一次命令,然后知道commit id 就OK了
head 是git 的版本指针,设定哪里,版本指针就会指向哪里,所以恢复速度很快
5、工作区和暂存区
- 工作区就是我们文件存放的区域,比如前面创建的jacklingit这个文件夹
- 被我们创建的版本库文件里面都会有一个.gitd的文件(隐藏目录),这是git的版本库,版本库里面成怒了很多东西,其中最重要的就是暂存区(stage).
- git为我们自动创建了一个分支master以及指向master的指针HEAD.
- 文件提交的两步 git add就是把文件添加到暂存区,git commit就是把暂存区的文件提交到当前分支。
6、管理修改
- git管理的不是文件,而是修改。
- 当你没有将修改add到暂存区的话,commit是无效的。
git diff HEAD --test.txt //查看文件的修改
7、撤销修改
-
当你该乱了工作区某个文件的内容,想直接丢弃工作区的修改
$ git checkout --test.txt
-
当你不但该乱了而且add到了暂存区
$ git reset HEAD test.txt $ git checkout --test.txt
-
当你不但放到了暂存区而且commit了,那就退回到上一个版本
$ git reset HEAD^
8、删除文件
-
删除文件
$ rm test.txt
这时工作区和暂存区的文件内容就不一致了,如果你要一并删除暂存区的对应文件,并且提交
$ git rm test.txt
$ git commit -m "remove test.txt"另一种情况时候误删,就用checkout恢复
$ git checkout -- test.txt
文件一旦提交到版本库,就永远不用担心误删,但时候要小心,最后一次修改的内容会丢失。
9、远程仓库
- 远程仓库的建立
$ ssh-keygen -t rsa -C "361525737@qq.com"
在用户目录输入命令之后一路回车,这时候有个.ssh的文件(可能是隐藏的),打开后里面有三个文件,其中一个是id_rsa.pub,打开然后复制里面的内容到github的SSH key中。 - 在github中建立与本地版本库同名的repository,就成功地创建了一个新的Git仓库
- 输入命令使本地版本库和远程库连通
git remote add origin git@github.com:361525737@qq.com/jacklin.git - 下一步,就可以把本地库的所有内容推送到远程库上:
$ git push -u origin master
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
10、从远程库克隆
登录github建立一个新的仓库 名字叫gitskills,勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件
-
然后克隆一个本地库
git clone git@github.com:Jacklin1992/gitskill.git如果有多个人协作开发,那么每个人各自从远程克隆一份就可以了。
11、创建与合并分支
查看分支:git branch 创建分支:git branch <name> 切换分支:git checkout <name> 创建+切换分支:git checkout -b <name> 合并某分支到当前分支:git merge <name> 删除分支:git branch -d <name>
12、合并冲突
- 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
- 用git log --graph命令可以看到分支合并图。
13、分支管理策略
- master分支是稳定分支,只用来发布新版本,不能再上面操作,工作配合都是在dev上完成,每个人将自己的分支不时的合并到dev上即可。
14、BUG处理
- 当修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
- 当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
$ git stash
$ git stash pop
15、feature分支
- 开发一个新feature,最好新建一个分支
- 如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
16、多人协作
- 查看远程库信息
$git remote -v - 本地新建的分支如果不推送到远程,对其他人就是不可见的
- 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交
$git push origin branch-name
$git pull - 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致
$git checkout -b branch-name origin/branch-name - 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
$git branch --set-upstream branch-name origin/branch-name - 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突
git pull