前述
- 個人部落格來源: Git常用指令
- Keylala線上工具
- 程式員導航
版本管理
- 檢視檔案變化
git diff README.md
- 送出日志
git log
git log commit 9fdc041e35d50cb4d2d0776cdbbb26e7e27d8c28 Author: alex <[email protected]> Date: Fri Oct 26 17:55:07 2018 +0800 修改菜單字首和字首值 commit 4fe2f7ec6c6c5d37b740c71c23170ddd7c462c4b Author: alex <[email protected]> Date: Fri Oct 26 17:22:15 2018 +0800 菜單字首和字首值 commit 8f9791beb1e5d44f02eaa79030b737e332e713a0 Author: alex <[email protected]> Date: Fri Oct 26 17:02:04 2018 +0800 dev
- 如果日志資訊太多麻煩可以用
git log --pretty=oneline
9fdc041e35d50cb4d2d0776cdbbb26e7e27d8c28 修改菜單字首和字首值 4fe2f7ec6c6c5d37b740c71c23170ddd7c462c4b 菜單字首和字首值 8f9791beb1e5d44f02eaa79030b737e332e713a0 dev 0d2b0f1d35d7a48affe813568ee17e0b6454292e 制定計劃
- 操作記錄
git reflog
ae32f2a (HEAD -> dev, origin/dev) [email protected]{0}: reset: moving to HEAD^ 449fe7d [email protected]{1}: commit: dev ae32f2a (HEAD -> dev, origin/dev) [email protected]{2}: commit: dev
- 版本回退
git reset
- 目前版本是
,上一個版本是HEAD
,上上版本是HEAD^
,數量多的時候,比如第一百個版本也可以寫為HEAD^^
HEAD~100
- 通過
可以知道git reflog | log
,執行commit id
回退到指定版本git reset {commit id}
- 目前版本是
- 檔案撤銷
git checkout --file
- 讓指定檔案回到最近一次
或git commit
時的狀态git add
- 讓指定檔案回到最近一次
分支管理
- 建立分支
git branch
- 比如建立用于開發的分支,而
做為穩定分支,master
git branch dev
- 比如建立用于開發的分支,而
- 切換分支
git checkout
- 切換為
分支dev
git branch dev
- 切換為
分支master
git branch master
- 切換為
- 合并分支
git merge
- 該指令為合并指定分支到目前分支
- 先切換到
分支,master
git checkout master
- 合并
到目前分支,dev
git merge dev
- 本次合并,會有一個提示
,即把Fast-forward
的指針指向了master
,但并不是每次合并都能dev
,特别是多人開發有很多分支的時候,後文會講到Fast-forward
-
合并方式看不出曾經做過合并,是以要帶參數Fast-forward
,這樣普通模式的合并可以使用--no-ff
檢視到合并記錄git log
- 删除分支
git branch -d
- 加入某一分支是為了解決某一問題而建立的,那麼修複之後就可以删除該分支了
- 删除
分支,dev
git branch -d dev
- 如果
分支沒有合并,會删除失敗,并被通知該分支還沒有全部合并,不可以删除dev
- 可以使用
來強制删除該分支git branch -D dev
- 解決沖突
- 如果兩個分支同時修改了一個檔案的同一個地方,那麼,合并分支的就是就會産生沖突,需要修複沖突之後再送出
- 可以使用
檢視沖突的檔案git status
- 打開檔案有類似以下的内容
<<<<<<< HEAD {master 分支修改的内容} ======= {dev 分支修改的内容} >>>>>>> dev
- 和同僚确認之後,修改為以下内容,并送出
{dev 分支修改的内容}
- 強勢删除他人送出的内容會讓你成為不受歡迎的人
-
指令也可以看到分支的合并情況git log
- BUG分支
- 當我們正在
上做開發,但這個時候有一個緊急修複的dev
,而這個時候bug
工作還未完成,我們需要從一個dev
的分支上建立新的分支,一種方式是從穩定的clean
分支上建立新分支,另一種就是用master
指令将git stash
尚未送出的内容存儲到别的地方,造成一個工作區域dev
的假象clean
- 如果是從
分支建立出來的,那麼隻要合并回去就好,但這個時候master
和master
分支就有點麻煩了,可能會造成合并沖突dev
- 如果是從
分支建立出來的,我們需要把之前存儲到别的地方的内容還原回來dev
- 首先可以使用
檢視存儲的内容git stash list
[email protected]{0}: WIP on dev: f52c633 add merge
- 然後有兩種方法恢複内容,一個是先用
恢複工作區域,但還要用git stash apply
來删除git stash drop
存儲的内容。另一種方式就是用stash
,恢複的同時也把存儲的内容删除了git stash pop
- 如果有多次的
,用stash
檢視之後,也可以恢複指定的git stash lis
stash
git stash apply [email protected]{0}
- 當我們正在
- 分支政策
-
做為穩定版本,一般不直接用于開發,習慣上建立master
分支,大家從dev
分支上拉取版本,開發完成後推送給dev
dev
- 當發現問題的時候,比如提了一個
,issue
為id
,那麼我們可以建立一個分支54
用于修複該問題,合并分之後删除分支issue-54
issue-54
- 當有新特性要開發的時候,可以建立特性分支,比如
分支,加入對feature-md
的支援,完成之後再删除該分支Markdown
-
标簽管理
- 我們可以在某個正式版本釋出的時候打一個标簽,比如
,v1.0
,這樣以後有需要的之後可以直接取出該版本,如果是直接從v1.2
分支取出,則需要知道master
,這是一個commit id
值,一長串字母和數字,沒有版本号那麼隻管友善hash
- 建立标簽
- 一般我們選擇在穩定的
打新标簽master
- 使用
建立了名為git tag v1.0
的标簽v1.0
- 如果我們想對曆史上的某個
分支打标簽,可以先執行commit id
找到git log --pretty=oneline --abbrev-commit
,然後執行commit id
打新标簽git tag v0.9 {commit id}
- 一般我們選擇在穩定的
- 檢視标簽
git tag
- 标簽是不是按照打标簽的先後順序列出的,而是按照字母順序排列的
- 檢視詳情
git show
-
git show v1.0
-
- 取出标簽版本
git checkout
- 取出
版本:v1.0
git checkout v1.0
- 取出
- 推送标簽
- 标簽隻存儲在本地,不會自動推送到遠端
- 推送某個标簽:
git push origin v1.0
- 推送所有尚未推送到遠端的标簽:
git push origin --tags
- 删除标簽
- 删除隻存在本地的标簽:
git tag -d v1.0
- 删除在遠端存在的标簽: 先删除本地标簽,再删除遠端标簽
git push origin :refs/tags/v1.0
- 删除隻存在本地的标簽:
指令簡寫
- 可以自行編寫簡寫指令
git config --global alias.co checkout git config --global alias.ci commit git config --global alias.br branch git config --global alias.st status 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"
- 加上
對目前使用者有效,否則隻對目前倉庫有效--global
- 加上
- https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000)