git命令

1、git基本命令git

1)git init                 #在本地建一個git管理目錄github

2)git clone git://...git   #將倉庫中的所有分支分支克隆到本地當前git管理目錄shell

3)git status               #查看當前目錄中,文件的修改狀態安全

4)git add 文件名           #添加到git管理app

5)git diff               #查看當前目錄全部修改過的文件(修改過尚未使用commit提交的文件)ide

6)git diff --cached      #能夠查看使用add階段化後的差異svn

7) git diff branch_name   #比較當前分支與branch_name分支的不一樣
fetch

7)git diff 節點號1   節點號2      #比較2個節點的不一樣ui

7)git rm 文件名  & git rm -r 文件夾        #刪除文件和文件夾spa

8)git commit --m "new version"    #提交到本地庫

9)git push origin master          #將本地庫同步到遠程核心庫

10) git checkout  branchname   #切換到某個分支或檢出一個遠程分支

11) git revert HEAD          #還原最近一次提交的修改 (HEAD始終指向當前分支的當前節點)

12) git revert commit-id     #還原到指定節點的修改:

13) git log -p branch_name   #顯示當前分支的提交記錄,及代碼變動。

13)  git log                  #顯示當前分支的提交記錄

origin的含義:在clone完成以後,Git 會自動爲你將此遠程倉庫命名爲origin(origin至關於一個遠程倉庫的別名,運行git remote –v或者查看.git/config能夠看到origin的含義

2、git分支管理(分支管理開發過程:http://blog.jobbole.com/25877/)

1.git branch -a 查看全部分支,包括遠程的origin/master和本地的master(origin/master是存儲在本地的遠程主分支)

2.git fetch 將遠程的代碼同步到origin/master,可是沒有合併到master分支;這一步通常不會有衝突

3.git merge 合併origin/master與master分支,可能產生衝突;也能夠用rebase,這樣能夠減小分支的出現

4.git log --oneline --graph --stat  origin/master -p  查看分支的log,-p顯示修改部分

5.git difftool  比較更改

6.git checkout 檢出當前分支中的代碼到工做目錄,覆蓋工做目錄中的指定文件

(1)git checkout filename  從暫存區(cash)中檢出文件,覆蓋工做目錄中的指定文件

(2)git checkout HEAD filename 從倉庫中檢出文件,覆蓋暫存區和工做目錄.

7.reset和checkout的比較:

(1)checkout不能作commithash之間的復位

(2)一次checkout必定會改變工做目錄的內容,使得工做目錄中的內容與暫存區或與倉庫中的俄內容一致.

(3)一次reset必定會試圖改變HEAD的位置,reset以後,HEAD都會指向指定節點commithash,若是該commithash不是HEAD,那麼該commithash以後的節點將會從倉庫中被刪除.checkout是不會影響HEAD位置的.

(4)reset能夠將倉庫中的commithash還原到指定commithash;能夠將暫存區還原到倉庫中的指定commithash;能夠將工做目錄還原到倉庫中的指定commithash

git reset --hard HEAD = git checkout HEAD     檢出到本地工做目錄和暫存區

git reset HEAD  檢出到暫存區,默認爲--soft(若是暫存區有add的提交,將會被回退到unstaged狀態,工做目錄不變,這種狀況任何已有的修改都不會丟失)

git reset --hard HEAD  =  git reset HEAD  +  git checkout


(4)重點:checkout針對於每一個文件的還原;reset針對於全部文件(總體狀態)的還原

8.git diff

(1)git diff file 比較工做目錄與暫存區的不一樣

(2)git diff --cached file 比較暫存區與倉庫的不一樣

(3)git diff commithash file 比較工做目錄與倉庫的不一樣,若是時當前HEAD,那麼commithash=HEAD

(4)git diff commithash1 commithash2 file 計較任意2個commithash的不一樣

(5)git diff branchname  filename  比較當前分支與指定分支的不一樣

9.git log

(1)git log brname  查看任意分支的log (有意選項:--graph  --oneline)

(2)git log origin/master  查看origin/master遠程分支的log有重要的意義,能夠知道遠程分支的開發;使用fetch也是同步到該分支,不會產生衝突

(3)git log --stat HEAD 查看HEAD commithash修改過的文件有哪些

(4)git show查看文件的具體修改內容

10.分支管理

1)git branch-a 列出本地全部分支(包括隱含分支)

2)git branch -r         #列出遠程全部分支

3)git branch -a         #列出本地分支和遠程分支

4)git clone -b branchname https://github.com/jetty/     #克隆指定的遠程分支


5)git branch newbranchname              #新建一個本地分支

6)git checkout branchname               #切換到分支branchname,並將該分支檢出到工做目錄和暫存區

7)git checkout -b newbranchname            #建立並切換到新分支

8)git branch -m|-M oldbranch newbranch      #重命名分支,若是newbranch名字分支已經存在,則須要使用-M強制重命名,不然,使用-m進行重命名。

9)git branch -d|-D branchname #刪除[-D強制刪除]branchname分支

10)git branch -d -r branchname #刪除遠程branchname分支

11)git branch newbranch commithash #以commithash爲起點,建立新分支newbranch

12)git remote  -v #查看origin對應的遠程倉庫地址

13) git remote add origin http://10.9.111.221/liujin/multiproject.git  #修改origin對應的遠程分支

13)git log --oneline --decorate --graph --all  #查看提交歷史、各分支指向以及分支的分叉狀況

14)git push origin : branchname#推入origin指向的遠程地址的branchname分支

15)git checkout maste -> git merge branchname#將branchname分支合入主分支,修改衝突的文件後,git add 文件 而後git commit

16)git tag -a  1.2  #打一個標籤

11.合併與提交

fetch與pull

在將本地的代碼庫合併到遠程代碼庫以前,須要作一次fetch或pull,並解決相關的衝突

1). 合併步驟

a. git fetch:至關因而從遠程獲取最新版本到本地origin/master,不會自動merge,因而不會產生衝突

   git fetch origin master         //首先從遠程的origin的master主分支下載最新的版本到origin/master分支上,origin/master分支是一個隱形分支

   git log -p master..origin/master  //而後查看遠程的log,-p顯示每次提交的代碼的修改部分

b. git merge origin/master          //最後進行合併


上述過程其實能夠用如下更清晰的方式來進行:

git fetch origin master:tmp    //從遠程獲取最新的版本到本地的tmp新分支上(:指取一個別名)

git diff tmp                   //比較當前分支與tmp分支的不一樣

git merge tmp               //以後再進行比較合併,並解決衝突

git branch -d tmp            //刪除臨時分支


2). git pull:至關因而從遠程獲取最新版本並merge到本地(至關於svn的update)

git pull origin master   //更新遠程版本庫到本地版本庫

git pull origin branchname      //拉取fork庫中的一個分支

上述命令其實至關於git fetch 和 git merge

在實際使用中,git fetch更安全一些

由於在merge前,咱們能夠查看更新狀況,而後再決定是否合併

3).merge

git merge tmp   //將當前分支與tmp分支合併,若是存在衝突,那麼修改衝突所在的文件,而後使用如下命令提交修改的文件

git commit -a -m 'Resolved conflict'  //提交(也能夠用add和commit 2條命令替代)

git push origin master

最後就能夠push到遠程版本庫了


在有衝突的文件中

<<<<<<<標記衝突開始,後面跟的是當前分支中的內容。

  HEAD指向當前分支末梢的提交。

=======以後,>>>>>>>以前是要merge過來的另外一條分支上的代碼。

>>>>>>>以後的符號是該遠程分支的名字。


三.提交遠程版本庫與合併

fetch與pull
在將本地的代碼庫合併到遠程代碼庫以前,須要作一次fetch或pull,並解決相關的衝突
1. git fetch:至關因而從遠程獲取最新版本到本地,不會自動merge
git fetch origin master         //首先從遠程的origin的master主分支下載最新的版本到origin/master分支上,origin/master分支是一個隱形分支

git log -p master..origin/master  //而後查看遠程的log,-p顯示每次提交的代碼的修改部分
git merge origin/master          //最後進行合併

上述過程其實能夠用如下更清晰的方式來進行:
git fetch origin master:tmp    //從遠程獲取最新的版本到本地的tmp新分支上(:指取一個別名)
git diff tmp                   //比較當前分支與tmp分支的不一樣
git merge tmp               //以後再進行比較合併,並解決衝突
git branch -d tmp            //刪除臨時分支

2. git pull:至關因而從遠程獲取最新版本並merge到本地(至關於svn的update)
git pull origin master   //更新遠程版本庫到本地版本庫
git pull fork源 分支      //拉取fork庫中的一個分支
上述命令其實至關於git fetch 和 git merge
在實際使用中,git fetch更安全一些
由於在merge前,咱們能夠查看更新狀況,而後再決定是否合併
3.merge
git merge tmp   //將當前分支與tmp分支合併,若是存在衝突,那麼修改衝突所在的文件,而後使用如下命令提交修改的文件
git commit -a -m 'Resolved conflict'  //提交(也能夠用add和commit 2條命令替代)
git push origin master
最後就能夠push到遠程版本庫了

在有衝突的文件中
<<<<<<<標記衝突開始,後面跟的是當前分支中的內容。
  HEAD指向當前分支末梢的提交。
=======以後,>>>>>>>以前是要merge過來的另外一條分支上的代碼。
>>>>>>>以後的符號是該遠程分支的名字。

4、stash

git stash list [<options>]
git stash show [<stash>]
git stash drop [-q|--quiet] [<stash>]
git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]
git stash branch <branchname> [<stash>]
git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]
         [-u|--include-untracked] [-a|--all] [<message>]
git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]
         [-u|--include-untracked] [-a|--all] [-m|--message <message>]]
         [--] [<pathspec>…]]
git stash clear
git stash create [<message>]
git stash store [-m|--message <message>] [-q|--quiet] <commit>

描述

當要記錄工做目錄和索引的當前狀態,但想要返回到乾淨的工做目錄時,則使用git stash。 該命令保存本地修改,並恢復工做目錄以匹配HEAD提交。

這個命令所儲藏的修改可使用git stash list列出,使用git stash show進行檢查,並使用git stash apply恢復(可能在不一樣的提交之上)。調用沒有任何參數的git stash至關於git stash save。 默認狀況下,儲藏列表爲「分支名稱上的WIP」,但您能夠在建立一個消息時在命令行上給出更具描述性的消息。

建立的最新儲藏存儲在refs/stash中; 這個引用的反垃圾郵件中會發現較舊的垃圾郵件,而且可使用一般的reflog語法命名(例如,stash@{0}是最近建立的垃圾郵件,stash@{1}stash@{2.hours.ago}以前也是可能的)。也能夠經過指定存儲空間索引(例如整數n至關於儲藏stash@{n})來引用鎖存。

stash apply或者pop時可能會產生衝突,須要解決衝突。產生衝突的場景:(stash保存的是當前工做空間的全部被修改未提交的文件)

  1. stash save後,進行pull,而後apply,有可能產生衝突

  2. 在當前分支apply其它 分支save的內容,git將合併兩個文件,可能產生衝突


5、revert反轉

做用:撤銷指定的某「一次」提交,可能產生衝突。revert不會刪除原commit,只會產生一個新的commit。

# 撤銷前一次 commit

git revert HEAD                

# 撤銷前前一次 commit

git revert HEAD^

# 撤回指定commit-id#好比:git revert 0818badf6882ea2664a205bc8ef3a85425bb2537

git revert commit-id


git revert 329515

這個時候git提示你有衝突要解決。咱們打開A.txt,修改衝突,並執行如下命令

git revert --continue

這個時候git會繼續撤回,若是發現衝突會繼續提示。

若是不想解決衝突的話能夠取消撤回:

git revert --abort

相關文章
相關標籤/搜索