git命令

一、git基本命令

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

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

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

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

5)git diff               #查看當前目錄所有修改過的文件(修改過還沒有使用commit提交的文件)

6)git diff --cached      #可以查看使用add階段化後的差別

7) git diff branch_name   #比較當前分支與branch_name分支的不同

7)git diff 節點號1   節點號2      #比較2個節點的不同

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

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的含義

二、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過來的另一條分支上的代碼。
>>>>>>>之後的符號是該遠程分支的名字。

四、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將合併兩個文件,可能產生衝突


五、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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章