文章目錄
-
- 一、常用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。