合并分支时,加上--no-ff
参数就能够用普通模式合并,合并后的历史有分支,能看出来曾经作过合并,而fast forward
合并就看不出来曾经作过合并。
都是跟廖雪峰老师学的,总结一下:
java
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
git
1.安装git,创建用户github
$ git config --global user.name "Your Name" $ git config --global user.email "email@example.com"
注意git config命令的--global参数,用了这个参数,表示你这台机器上全部的Git仓库都会使用这个配置,固然也能够对某个仓库指定不一样的用户名和Email地址。app
2.创建文件夹,进入,显示当前路径spa
$ mkdir learngit $ cd learngit $ pwd /Users/michael/learngit
3.创建一个文件readme.txt,用命令git add
告诉Git,把文件添加到仓库:日志
$ git add readme.txt
4.第二步,用命令git commit
告诉Git,把文件提交到仓库:code
$ git commit -m "wrote a readme file" [master (root-commit) cb926e7] wrote a readme file 1 file changed, 2 insertions(+) create mode 100644 readme.txt
5.改变readme.txt文件后rem
git status
命令可让咱们时刻掌握仓库当前的状态,上面的命令告诉咱们,readme.txt被修改过了,但尚未准备提交的修改。get
$ git status # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: readme.txt # no changes added to commit (use "git add" and/or "git commit -a")
6.git diff
顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,能够从上面的命令输出看到,咱们在第一行添加了一个“distributed”单词。it
$ git diff readme.txt diff --git a/readme.txt b/readme.txt index 46d49bf..9247db6 100644 --- a/readme.txt +++ b/readme.txt @@ -1,2 +1,2 @@ -Git is a version control system. +Git is a distributed version control system. Git is free software.
7.git log
命令显示从最近到最远的提交日志,
若是嫌输出信息太多,看得眼花缭乱的,能够试试加上--pretty=oneline
参数:
$ git log commit 3628164fb26d48395383f8f31179f24e0882e1e0 Author: Michael Liao <askxuefeng@gmail.com> Date: Tue Aug 20 15:11:49 2013 +0800 append GPL commit ea34578d5496d7dd233c827ed32a8cd576c5ee85 Author: Michael Liao <askxuefeng@gmail.com> Date: Tue Aug 20 14:53:12 2013 +0800 add distributed
8.你看到的一大串相似3628164...882e1e0
的是commit id
(版本号),和SVN不同,Git的commit id
不是1,2,3……递增的数字,而是一个SHA1计算出来的一个很是大的数字,用十六进制表示。
上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,固然往上100个版本写100个^
比较容易数不过来,因此写成HEAD~100
。
也可使用 --hard 版本号
$ git reset --hard HEAD^ HEAD is now at ea34578 add distributed
$ git reset --hard 3628164 HEAD is now at 3628164 append GPL
git reflog
用来记录你的每一次命令:前面就是操做是的版本号
$ git reflog ea34578 HEAD@{0}: reset: moving to HEAD^ 3628164 HEAD@{1}: commit: append GPL ea34578 HEAD@{2}: commit: add distributed
git diff HEAD -- readme.txt
命令能够查看工做区和版本库里面最新版本的区别
11.命令git checkout -- readme.txt
意思就是,把readme.txt
文件在工做区的修改所有撤销,这里有两种状况:
一种是readme.txt
自修改后尚未被放到暂存区,如今,撤销修改就回到和版本库如出一辙的状态;
一种是readme.txt
已经添加到暂存区后,又做了修改,如今,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit
或git add
时的状态。
$ git checkout -- readme.txt
12.命令git reset HEAD file
能够把暂存区的修改撤销掉(unstage),从新放回工做区:
$ git reset HEAD readme.txt Unstaged changes after reset: M readme.txt
在使用 第11个命令git checkout -- readme.txt
丢弃工做去的修改
13.git rm
删除文件
$ git rm test.txt rm 'test.txt' $ git commit -m "remove test.txt" [master d17efd8] remove test.txt 1 file changed, 1 deletion(-) delete mode 100644 test.txt
14.要关联一个远程库,使用命令git remote add origin git@github.com:michaelliao/learngit.git
;
关联后,使用命令git push -u origin master
第一次推送master分支的全部内容;
加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在之后的推送或者拉取时就能够简化命令。
此后,就可使用命令git push origin master
推送最新修改;
15.git clone
克隆一个本地库:
$ git clone git@github.com:michaelliao/gitskills.git
16.git checkout
命令加上-b
参数表示建立并切换
$ git checkout -b dev Switched to a new branch 'dev'
至关于:
$ git branch dev $ git checkout dev Switched to branch 'dev'
17.git branch
命令查看当前分支,当前分支前面会标一个*
号。
$ git branch * dev master
18.git merge
命令用于合并指定分支到当前分支。
$ git merge dev Updating d17efd8..fec145a Fast-forward readme.txt | 1 + 1 file changed, 1 insertion(+)
19.删除dev
分支:
$ git branch -d dev Deleted branch dev (was fec145a).
20.当Git没法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
用git log --graph
命令能够看到分支合并图。
解决冲突就是在master分支上将文件修改后在add commit
$ git log --graph --pretty=oneline --abbrev-commit * 59bc1cb conflict fixed |\ | * 75a857c AND simple * | 400b400 & simple |/ * fec145a branch test ...
21.一般,合并分支时,若是可能,Git会用Fast forward
模式,但这种模式下,删除分支后,会丢掉分支信息。
若是要强制禁用Fast forward
模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就能够看出分支信息。
下面咱们实战一下--no-ff
方式的git merge
$ git merge --no-ff -m "merge with no-ff" dev Merge made by the 'recursive' strategy. readme.txt | 1 + 1 file changed, 1 insertion(+)
合并分支时,加上--no-ff
参数就能够用普通模式合并,合并后的历史有分支,能看出来曾经作过合并,而fast forward
合并就看不出来曾经作过合并。