合併分支時,加上--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
合併就看不出來曾經作過合併。