[總結]git總結

文章簡要記錄部分常用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分支的鏈接,根據提示,設置devorigin/dev的鏈接。

$ git branch --set-upstream dev origin/dev
Branch dev set up to track remote branch dev from origin.

git pullgit fetch的區別

git fetch <遠程主機名> <分支名>將某個遠程主機的更新,全部取回本地。默認取回所有分支的更新。
pull相當於fetch+merge
加上-p可以刪除遠程已經刪除的分支

$ git pull -p
# 等同於下面的命令
$ git fetch --prune origin 
$ git fetch -p

多人協作的工作模式通常是這樣:

  1. 首先,可以試圖用git push origin branch-name推送自己的修改;

  2. 如果推送失敗,則因爲遠程分支比你的本地更新,需要先用git pull試圖合併;

  3. 如果合併有衝突,則解決衝突,並在本地提交;

  4. 沒有衝突或者解決掉衝突後,再用git push origin branch-name推送就能成功!

  5. 如果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

18、 git學習參考鏈接

廖雪峯Git教程
git簡易指南


發佈了38 篇原創文章 · 獲贊 33 · 訪問量 47萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章