天天看點

git command and git config

文章目錄

    • 一、常用git指令
      • 送出所有工作區檔案,包括未被跟蹤的檔案
      • 追加到上一次的送出
      • 删除之前送出到遠端倉庫的檔案
      • 删除一個檔案夾(有特殊字元的用""  漢字可以用*代替)
      • 撤銷暫存區add的檔案
      • 删除追蹤狀态
      • 清除工作區的所有改動
      • 清除未跟蹤的檔案,-會列出被删除的檔案 -包括檔案夾
      • 更新代碼的時候,git pull後加上遠端分支,避免pull出錯
      • 回退版本
      • stash的使用
      • 打patch方法
      • git使用要點:
      • 建立追蹤關系,在現有分支與指定的遠端分支之間
      • 本地分支重命名
      • 顯示指定檔案是什麼人在什麼時間修改過
      • 顯示暫存區和上一個commit的差異
      • 顯示工作區與目前分支最新commit之間的差異
      • 顯示兩次送出之間的差異
      • git log 控制顯示的記錄格式
      • alias指令用來設定指令的别名。我們可以使用該指令可以将一些較長的指令進行簡化。使用alias時,使用者必須使用單引号''将原來的指令引起來,防止特殊字元導緻錯誤
    • 二、git配置(.gitconfig)
    • 三、git 常見問題及解決方案
      • 問題1:The change could not be rebased due to a path conflict during merge.
      • 問題2:使用git時候會出現 missing change-id in commit message footer的情況在網上搜所得出的解決方案是:

一、常用git指令

送出所有工作區檔案,包括未被跟蹤的檔案

git add -A

1 git add -A 送出所有變化(是下面兩個功能的合集(git add --all的縮寫))

2 git add -u 送出被修改(modified)和被删除(deleted)檔案,不包括新檔案(new)

3 git add . 送出新檔案(new)和被修改(modified)檔案,不包括被删除(deleted)檔案

追加到上一次的送出

git commit --amend

删除之前送出到遠端倉庫的檔案

git rm [filename]

删除一個檔案夾(有特殊字元的用""  漢字可以用*代替)

git rm -r “doc/Qualcomm/Milan-K&H_andorid_M*”

撤銷暫存區add的檔案

git reset HEAD  :不加,則撤銷所有暫存區的add檔案

删除追蹤狀态

git rm --cache  :删除的是追蹤狀态,而不是實體檔案。有時不想删除本地的檔案, 隻是想讓git不再track

清除工作區的所有改動

git checkout -f

清除未跟蹤的檔案,-會列出被删除的檔案 -包括檔案夾

git clean -ndf

更新代碼的時候,git pull後加上遠端分支,避免pull出錯

git pull origin [remote branch]

回退版本

HEAD:本地倉庫,這是目前分支版本頂端的别名,也就是在目前分支你最近的一個送出

Index:暫存區,index也被稱為staging area,是指一整套即将被下一個送出的檔案集合。他也是将成為HEAD的父親的那個commit

Working Copy:工作區,working copy代表你正在工作的那個檔案集

git reset --mixed [commit id]:此為預設方式,不帶任何參數的git reset,即時這種方式,它回退到某個版本,隻保留源碼,回退commit和index資訊

git reset --soft [commit id]:回退到某個版本,隻回退了commit的資訊(即回退到某個版本的暫存區)。如果還要送出,直接commit即可

git reset --hard [commit id] :徹底回退到某個版本,本地的源碼也會變為上一個版本的内容,此指令 慎用!這是一個比較危險的動作,具有破壞性,資料是以可能會丢失!如果真是發生了資料丢失又希望找回來,那麼隻有使用:git reflog指令了

git reset HEAD~1 :撤銷本地倉庫的最近一個送出,預設mixed方式,即隻保留源碼,回退到某個版本的工作區。

stash的使用

git stash: 備份目前的工作區的内容,從最近的一次送出中讀取相關内容,讓工作區保證和上次送出的内容一緻。同時,将目前的工作區内容儲存到Git棧中。

git stash -a: 将工作區以及Untracked files都備份起來。

git stash pop: 從Git棧中讀取最近一次儲存的内容,棧中的stash被删除,恢複工作區的相關内容。由于可能存在多個Stash的内容,是以用棧來管理,pop會從最近的一個stash中讀取内容并恢複。

git stash apply []: 從Git棧中讀取某一次儲存的内容,棧中的stash不被删除。

git stash list: 顯示Git棧内的所有備份,可以利用這個清單來決定從那個地方恢複。

git stash drop [] 删除某一個進度,預設删除最新進度

git stash clear: 清空Git棧。此時使用gitg等圖形化工具會發現,原來stash的哪些節點都消失了。

#So, to view the content of the most recent stash, run

git stash show -p

#To view the content of an arbitrary stash, run something like

git stash show -p [email protected]{1}

#git stash 添加注釋

git stash save -u “msg”

打patch方法

git show [cmomit ID] > [filename].patch

git diff [file] > [filename].patch

#使用patch方法

git apply [filename].patch

git使用要點:

1、每次要解決問題之前(一定要建立分支),把master分支git pull --rebase到最新

2、git checkout -b bug_overflow local_branch 建一個新的分支(這時候的代碼與master的一緻),再在這個上面做修改

3、修改完之後直接 git push origin HEAD:refs/for/master 将送出區的修改Push到Gerrit上

4、git branch -d bug_overflow 修複完bug後,将分支删除

建立追蹤關系,在現有分支與指定的遠端分支之間

$ git branch --set-upstream [branch] [remote-branch]

$ git branch --set-upstream-to=origin/<remote_branch> <local_branch>

本地分支重命名

$ git branch -m

$ git branch -m | -M 重命名分支,如果newbranch名字分支已經存在,則需要使用-M強制重命名,否則,使用-m進行重命名。

顯示指定檔案是什麼人在什麼時間修改過

$ git blame [file]

顯示暫存區和上一個commit的差異

$ git diff --cached [file]

顯示工作區與目前分支最新commit之間的差異

$ git diff HEAD

顯示兩次送出之間的差異

$ git diff [first-branch]…[second-branch]

git log 控制顯示的記錄格式

git log --pretty=format:"%Cred%h%Creset -%C(yellow)%d%Cblue %s %Cgreen(%cd) %C(bold blue)<%an>"

alias指令用來設定指令的别名。我們可以使用該指令可以将一些較長的指令進行簡化。使用alias時,使用者必須使用單引号’'将原來的指令引起來,防止特殊字元導緻錯誤

alias gitlog=‘git log --pretty=format:’’’%h :%an :%ad :%s’’’ --topo-order --graph --date=short’

二、git配置(.gitconfig)

僅供參考

[user]
	email = ***
	name = ***

[core]
    editor = vim

[color]
    ui = true
    branch = true
    diff = true
    status = true
    log = true
    pager = true
    decorate = true

[color "branch"] current = red bold#reverse
    local = yellow
    remote = green

[color "diff"]
    meta = yellow
    old = green bold
    new = red bold
    whitespace = yellow
    commit = yellow
    frag = cyan

[color "status"]
    added = yellow
    changed = green
    untracked = cyan

[color "grep"]
#   external = yellow
    match = red
    linenumber = yellow # [-n]

[color "interactive"]
    header = yellow
    help = yellow
    prompt = yellow

[color "log"]
    commit = red
    decorate = green
    showroot = yellow

[alias]
        log5 = log -5           #顯示最近的5個送出
        log10 = log -10         #顯示最近的10個送出
        glog = log --pretty=oneline --graph
        st = status
        co = checkout
        ct = commit
        cm = commit -m
        df = diff
        br = branch
        bm = branch -m
        bd = branch -D
        ss = stash
        ro = remote -v
        pr = pull --rebase
        po = push origin HEAD:refs/for/$1

[diff]
    	tool = bc3
[difftool]
    prompt = false
[difftool "bc3"]
    	path = /usr/bin/bcompare

[merge]
    	tool = bc3
[mergetool]
    prompt = false
[mergetool "bc3"]
	path = /usr/bin/bcompare

[commit]
    template = /home/***/.gitmsg
[push]
	default = matching

           

三、git 常見問題及解決方案

問題1:The change could not be rebased due to a path conflict during merge.

解決方法:

git pull -r   (git pull --rebase)将代碼pull到最新,并将自己修改的代碼打patch到最新代碼上

git rebase 将本地所有修改打個patch,将代碼拉到最新,将patch打到最新代碼中,可能會有沖突需要解決。

出現沖突用git status可以檢視沖突檔案,用git mergetool -y 打開beyondcompare來自動合并沖突,檢查一下合并後的檔案,解決沖突無誤之後用git rebase --continue

問題2:使用git時候會出現 missing change-id in commit message footer的情況在網上搜所得出的解決方案是:

方案1:把他提示你的那句話複制輸入一下:類似 scp -p -P 9018 [email protected]:hooks/commit-msg .git/hooks/  然後将Commit message中的"Change-Id:"删除,再push。

方案2:随便修改一個檔案 ,然後重新git add,git commit --amend ,git push即可,如果還不行就将修改的代碼回退到index區,再重新commit,push。