文章簡要記錄部分常用git命令。本文感謝 廖雪峯 提供的詳細git教程。
1、 自報家門
注意
git config
命令的--global
參數,是機器維度上的全局配置,可以對某個倉庫指定不同的用戶名和email地址。
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"
讓
git
顯示顏色,讓命令輸出看起來更醒目
$ git config --global color.ui true
防止中文文件名或者路徑轉義成xxx
$ git config --globalcore.quotepath false
回車符號自動轉換
true
提交時轉換爲LF,檢出時轉換爲CRLF
input
提交時轉換爲LF,檢出時不轉換
false
提交檢出均不轉換
$ git config --global core.autocrlf false
拒絕提交包含混合換行符的文件
true
拒絕
false
允許
warn
警告
$ git config --global core.safecrlf true
簡易推送,意味着如果沒有指定分支,推送當前分支
$ git config --global push.default simple
2、 查看版本信息
$ git status
3、 查看提交日誌
加上
--pretty=oneline
使每個提交顯示在一行
查看提交歷史來決定要回退到那個版本
$ git log --pretty=oneline
4、 查看操作日誌
用來查看每一次命令的記錄
可以回滾之後再恢復,“回到未來”
$ git reflog
5、 回滾版本
回退到上一個
commit
的版本
$ git reset --hard HEAD^
回退到某一個
commit
的版本
$ git reset --hard commit_id
本地master分支reset之後push的時候要加上-f參數
$ git push -f origin master
6、 撤銷更改
撤銷單個文件的更改,使改文件返回add之前的狀態
$ git checkout -- file
7、 關聯遠程倉庫
添加後,遠程庫的名字就是
origin
,這是git默認的叫法,可以改成別的。但是這一看就是遠程庫。
同時,放心你們推不上去,因爲你的ssh key
不在我的賬戶列表中
$ git remote add origin [email protected]:psiitoy/art.git
8、 把本地庫的所有內容推送到遠程庫上
由於遠程庫是空的,我們第一次推送
master
分支時,加上了-u
參數,Git不但會把本地的master
分支內容推送的遠程新的master
分支,還會把本地的master
分支和遠程的master
分支關聯起來,在以後的推送或者拉取時就可以簡化命令。
-u
是關聯的意思
$ git push -u origin master
以後本地做了提交想推送到遠程就是
$ git push origin master
9、 創建分支
創建
<name>
分支,然後切換到<name>
分支
$ git checkout -b <name>
等同於
$ git branch <name>
$ git checkout <name>
查看當前分支
$ git branch
查看所有分支信息,版本號和描述
$ git branch -va
切換分支
$ git checkout <name>
合併分支
$ git merge <name>
刪除分支
branch -d
如果是刪除一個沒被合併的分支要用branch -D
強行刪除
$ git branch -d <name>
10、 合併分支
合併流程,先
merge
,再解決衝突,然後add
,commit
$ git merge <fromBranch>
合併分支時,加上
--no-ff
參數就可以用普通模式合併,合併後的歷史有分支,能看出來曾經做過合併,而fast forward
合併就看不出來曾經做過合併。
$ git merge --no--ff -m 'merge with no-ff' <fromBranch>
查看分支合併圖
$ git log --graph
11、 暫存分支
暫存
$ git stash
Saved working directory and index state WIP on dev: 6224937 add merge
HEAD is now at 6224937 add merge
查看暫存列表
$ git stash list
stash@{0}: WIP on dev: 6224937 add merge
恢復工作現場並且刪除該stash使用
pop
,如果不刪則使用apply
$ git stash pop
恢復某個stash
$ git stash list
$ git stash apply stash@{0}
12、 多人協作
查看遠程庫信息
$ git remote
origin
查看所有遠程庫分支信息
$ git remote show origin
查看遠程庫更詳細的信息,是否有權限抓取
fetch
和推送push
$ git remote -v
origin [email protected]:michaelliao/learngit.git (fetch)
origin [email protected]:michaelliao/learngit.git (push)
推送遠程分支
$ git push origin <branchName>
git pull
失敗,原因是沒有指定本地dev
分支與遠程origin/dev
分支的鏈接,根據提示,設置dev
和origin/dev
的鏈接。
$ git branch --set-upstream dev origin/dev
Branch dev set up to track remote branch dev from origin.
git pull
和git fetch
的區別
git fetch <遠程主機名> <分支名>
將某個遠程主機的更新,全部取回本地。默認取回所有分支的更新。
pull
相當於fetch
+merge
加上-p
可以刪除遠程已經刪除的分支
$ git pull -p
# 等同於下面的命令
$ git fetch --prune origin
$ git fetch -p
多人協作的工作模式通常是這樣:
首先,可以試圖用git push origin branch-name推送自己的修改;
如果推送失敗,則因爲遠程分支比你的本地更新,需要先用git pull試圖合併;
如果合併有衝突,則解決衝突,並在本地提交;
沒有衝突或者解決掉衝突後,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,則說明本地分支和遠程分支的鏈接關係沒有創建,用命令git branch –set-upstream branch-name origin/branch-name。
13、 創建標籤
tag就是一個讓人容易記住的有意義的名字,它跟某個
commit
綁在一起。打最新提交的commit或者指定commit_id
,還可以加-m
指定說明文字。
$ git tag v1.0
$ git tag v0.9 6224937
$ git tag -a v0.1 -m "version 0.1 released" 3628164
查看所有標籤
$ git tag
v0.9
v1.0
查看標籤信息
$ git show v0.9
刪除標籤
$ git tag -d v0.1
Deleted tag 'v0.1' (was e078af9)
推送某個標籤到遠程
$ git push origin v1.0
Total 0 (delta 0), reused 0 (delta 0)
To [email protected]:michaelliao/learngit.git
* [new tag] v1.0 -> v1.0
一次性推送全部尚未推送到遠程的本地標籤
$ git push origin --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 554 bytes, done.
Total 1 (delta 0), reused 0 (delta 0)
To [email protected]:michaelliao/learngit.git
* [new tag] v0.2 -> v0.2
* [new tag] v0.9 -> v0.9
如果標籤已經推送到遠程,要刪除遠程標籤就麻煩一點,先從本地刪除,然後,從遠程刪除。刪除命令也是push,但是格式如下。
$ git tag -d v0.9
Deleted tag 'v0.9' (was 6224937)
$ git push origin :refs/tags/v0.9
To [email protected]:michaelliao/learngit.git
- [deleted] v0.9
14、 配置別名
我們只需要敲一行命令,告訴Git,以後
st
就表示status
$ git config --global alias.st status
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
甚至還有人喪心病狂地把
lg
配置成了:git lg
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
15、 不小心提交錯了不想納入版本管理的文件
gitignore
不起作用
明明寫好了規則,但問題不起作用,每次還是重複提交,無法忍受.其實這個文件裏的規則對已經追蹤的文件是沒有效果的.所以我們需要使用rm命令清除一下相關的緩存內容.這樣文件將以未追蹤的形式出現.然後再重新添加提交一下,.gitignore文件裏的規則就可以起作用了。
$ git rm -r --cached .
$ git add .
$ git commit -m 'update .gitignore'
16、 運用shh -T -v [email protected]查看具體出錯信息,再根據信息來調試
$ ssh -T [email protected]
Welcome to GitLab, psiitoy!
$ ssh -vT [email protected]
...
17、 清理遠端,已經合併過的分支
$ git br -r --merged | egrep -v "origin/master|origin/HEAD" | sed 's/origin\//:/g' | xargs git push origin