git學習命令

都是跟廖雪峯老師學的,總結一下:
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

9. git reflog 用來記錄你的每一次命令:前面就是操做是的版本號
$ git reflog
ea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPL
ea34578 HEAD@{2}: commit: add distributed

10. git diff HEAD -- readme.txt 命令能夠查看工做區和版本庫裏面最新版本的區別


11.命令git checkout -- readme.txt意思就是,把readme.txt文件在工做區的修改所有撤銷,這裏有兩種狀況:

一種是readme.txt自修改後尚未被放到暫存區,如今,撤銷修改就回到和版本庫如出一轍的狀態;

一種是readme.txt已經添加到暫存區後,又做了修改,如今,撤銷修改就回到添加到暫存區後的狀態。

總之,就是讓這個文件回到最近一次git commitgit 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合併就看不出來曾經作過合併。

---------------------------------------------------------------------------------就到這裏--------------------------------------------------------------------------------------------
相關文章
相關標籤/搜索