1. 在Linux上安装Git
ubuntu系统 sudo apt-get install git 通过git --version 查看安装版本
2.创建版本库
(1)选择一个合适的地方,创建一个空目录:
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
(2)通过git init命令把这个目录变成Git可以管理的仓库:
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见
(3)现在我们编写一个readme.txt文件,内容如下
Git is a version control system.
Git is free software.
第一步,用命令git add告诉Git,把文件添加到仓库:
$ git add readme.txt
第二步,用命令git commit告诉Git,把文件提交到仓库
$ git commit -m "wrote a readme file"
为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件
3.时光穿梭机
我们继续修改readme.txt文件
运行git status命令看看结果
$ git status no changes added to commit (use "git add" and/or "git commit -a")
需要用git diff这个命令看看
$ git diff readme.txt
知道了对readme.txt作了什么修改后,再把它提交到仓库就放心多了,提交修改和提交新文件是一样的两步
第一步是git add
$ git add readme.txt
在执行第二步git commit之前,我们再运行git status看看当前仓库的状态
$ git status
$ git commit -m "add distributed"
版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log命令查看
$ git log
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:
$ git log --pretty=oneline
Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
我们要把当前版本“append GPL”回退到上一个版本“add distributed”,就可以使用git reset命令
$ git reset --hard HEAD^
使用cat命令来查看文档内容
$ cat readme.txt
从21世纪坐时光穿梭机来到了19世纪,想再回去已经回不去了,肿么办
只要上面的命令行窗口还没有被关掉,你就可以顺着往上找
$ git reset --hard 3628164 版本号没必要写全,前几位就可以
你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办
Git提供了一个命令git reflog用来记录你的每一次命令
现在总结一下:
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,
使用命令git reset --hard commit_id。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
撤销修改
git checkout -- file可以丢弃工作区的修改
$ git checkout -- readme.txt
git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令
用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区
$ git reset HEAD readme.txt
命令git rm用于删除一个文件
远程仓库
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
$ git push -u origin master
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
小结
要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。
$ git clone git@github.com:michaelliao/gitskills.git
Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快
分支管理
我们创建dev分支,然后切换到dev分支:
$ git checkout -b dev
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
用git branch命令查看当前分支:
$ git branch
git branch命令会列出所有分支,当前分支前面会标一个*号
我们把dev分支的工作成果合并到master分支上
$ git merge dev
git merge命令用于合并指定分支到当前分支
小结
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
用git log --graph命令可以看到分支合并图。
合并分支时,加上--no-ff参数就可以用普通模式合并
分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
$ git stash
小结
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
推送分支
$ git push origin master
$ git push origin dev
小结
查看远程库信息,使用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,如果有冲突,要先处理冲突。
ubuntu系统 sudo apt-get install git 通过git --version 查看安装版本
2.创建版本库
(1)选择一个合适的地方,创建一个空目录:
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
(2)通过git init命令把这个目录变成Git可以管理的仓库:
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见
(3)现在我们编写一个readme.txt文件,内容如下
Git is a version control system.
Git is free software.
第一步,用命令git add告诉Git,把文件添加到仓库:
$ git add readme.txt
第二步,用命令git commit告诉Git,把文件提交到仓库
$ git commit -m "wrote a readme file"
为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件
3.时光穿梭机
我们继续修改readme.txt文件
运行git status命令看看结果
$ git status no changes added to commit (use "git add" and/or "git commit -a")
需要用git diff这个命令看看
$ git diff readme.txt
知道了对readme.txt作了什么修改后,再把它提交到仓库就放心多了,提交修改和提交新文件是一样的两步
第一步是git add
$ git add readme.txt
在执行第二步git commit之前,我们再运行git status看看当前仓库的状态
$ git status
$ git commit -m "add distributed"
版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log命令查看
$ git log
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:
$ git log --pretty=oneline
Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
我们要把当前版本“append GPL”回退到上一个版本“add distributed”,就可以使用git reset命令
$ git reset --hard HEAD^
使用cat命令来查看文档内容
$ cat readme.txt
从21世纪坐时光穿梭机来到了19世纪,想再回去已经回不去了,肿么办
只要上面的命令行窗口还没有被关掉,你就可以顺着往上找
$ git reset --hard 3628164 版本号没必要写全,前几位就可以
你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办
Git提供了一个命令git reflog用来记录你的每一次命令
现在总结一下:
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,
使用命令git reset --hard commit_id。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
撤销修改
git checkout -- file可以丢弃工作区的修改
$ git checkout -- readme.txt
git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令
用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区
$ git reset HEAD readme.txt
命令git rm用于删除一个文件
远程仓库
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
$ git push -u origin master
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
小结
要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。
$ git clone git@github.com:michaelliao/gitskills.git
Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快
分支管理
我们创建dev分支,然后切换到dev分支:
$ git checkout -b dev
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
用git branch命令查看当前分支:
$ git branch
git branch命令会列出所有分支,当前分支前面会标一个*号
我们把dev分支的工作成果合并到master分支上
$ git merge dev
git merge命令用于合并指定分支到当前分支
小结
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
用git log --graph命令可以看到分支合并图。
合并分支时,加上--no-ff参数就可以用普通模式合并
分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
$ git stash
小结
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
推送分支
$ git push origin master
$ git push origin dev
小结
查看远程库信息,使用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,如果有冲突,要先处理冲突。