1、簡介
Git
是一種分布式版本控制系統
2、官網
https://git-scm.com/
3、SVN和Git的差別
SVN
- 優點
- 采用集中式,保證安全性
- 管理友善,邏輯明确
- 代碼的一緻性高
- 适合人數不多的項目開發
- 缺點
- 服務端單點故障
- 必須連接配接SVN伺服器上,否則不能對比,送出,還原。
- 沒有本地倉庫
- 不适合開源開發
Git
- 有本地倉庫,可以離線工作
- 公共伺服器壓力和資料量都不會太大
- 速度快,靈活
- 分支操作非常流暢
- 學習成本高
- 代碼保密性查
4、.git的作用
用來跟蹤管理版本庫的
5、工作流程
- 代碼優先初始化:git init
- 代碼然後通過git add 送出到暫存區
- 再通過暫存區通過git commit 送出本地庫
- 最後使用git push 推送遠端倉庫
6、檢視SSH密鑰
cd ~
rm -rvf .ssh
ssh-keygen -t rsa -C 郵箱位址
cat ~/.ssh/id_rsa.pub
7、開發者使用者名和郵箱
# 設定
git config user.name 霖雨
git config user.email [email protected]
# 删除
git config --unset user.name
git config --unset user.email
8、系統全局使用者名和郵箱(推薦)
# 設定
git config --global user.name test
git config --global user.email [email protected]
# 删除
git config --global --unset user.name
git config --global --unset user.email
9、配置别名
# 配置别名
git config --global alias.co checkout
git config --global alias.ss status
git config --global alias.cm commit
git config --global alias.br branch
git config --global alias.rg reflog
# 這裡隻是美化 log 的輸出,實際使用時可以在 git lg 後面加指令參數,如:git lg -10 顯示最近10條送出
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"
10、其他
# 檢視開發者使用者名和郵箱
cat ~/.gitconfig
# 檢視系統配置
git config --list
# 檢視目前項目的 git 配置
cat .git/config
# 檢視暫存區的檔案
git ls-files
# 幫助指令
git --help -a
# 拉取、上傳免密碼
git config --global credential.helper store
# 删除工作區/暫存區的檔案
git rm [file1] [file2] ...
# 停止追蹤指定檔案,但該檔案會保留在工作區
git rm --cached [file]
# 改名工作區/暫存區的檔案
git mv old.txt new.txt
# 建立目前分支和遠端分支的追蹤關系
git push -u origin master
# 删除遠端分支
git push origin --delete master
# 将本地的所有分支都推送到遠端主機
git push --all origin
# 建立一個空白分支,先把目前分支的内容全部删掉
git rm -rf .
# 再建立
git checkout --orphan 空的分支名
11、普通指令
# 初始化
git init
# 檢視狀态
git status
# 送出到暫存區
git add .
# 如果有錯的情況下,移除暫存區
git rm --cached hello.txt
# 送出本地庫
git commit -m "首次送出"
# 檢視日志(HEAD:指針):送出記錄可能會非常多,按 J 鍵往下翻,按 K 鍵往上翻,按 D 鍵往下頁,按b往上翻頁,按空格往下翻頁,按 Q 鍵退出檢視
# oneline -> 将日志記錄一行一行的顯示
# grep="關鍵字" -> 查找日志記錄中(commit送出時的注釋)與關鍵字有關的記錄
# graph -> 記錄圖形化顯示 !!!
# all -> 将所有記錄都詳細的顯示出來
# author "username" -> 查找這個作者送出的記錄
# reverse -> commit 送出記錄順序翻轉
# before -> 查找規定的時間(如:1天/1周)之前的記錄
# num -> git log -10 顯示最近10次送出 !!!
# stat -> 顯示每次更新的檔案修改統計資訊,會列出具體檔案清單 !!!
# abbrev-commit -> 僅顯示 SHA-1 的前幾個字元,而非所有的 40 個字元 !!!
# pretty=format:"xxx" -> 可以定制要顯示的記錄格式 !!!
# p -> 顯示每次送出所引入的差異(按 更新檔 的格式輸出)!!!
git log --oneline
--grep="關鍵字"
--graph
--all
--author "username"
--reverse
-num
-p
--before= 1 day/1 week/1 "2019-06-06"
--after= "2019-06-06"
--stat
--abbrev-commit
--pretty=format:"xxx"
# 檢視日志(HEAD:指針):顯示版本曆史資訊復原步數
git reflog
# 切換版本号
git reset --hard 版本号
# 永久删除的檔案恢複
git add test.txt
git commit -m "new file"
rm test.txt
git add test.txt
git commit -m "恢複"
git reflog
git reset --hard 51acbc2
# 綁定遠端倉庫
git remote add origin https://github.com/q-linyu/test.git
# 檢視遠端倉庫的别名
$ git remote -v
origin https://github.com/q-linyu/test.git (fetch)
origin https://github.com/q-linyu/test.git (push)
# 推送遠端倉庫 or 強行推送
git push -u origin master | git push origin master -f
# 克隆/把遠端的代碼拉到本地來
git clone https://github.com/q-linyu/test.git
12、日志無法顯示中文問題
git -c core.pager=more log
# 如果可以顯示中文的話,把 pager 設定為 more
git config --global core.pager more
13、項目标記裡程碑
# 項目上線釋出的時候用,做一個标記
git tag
14、分支的含義
在版本控制過程中,使用多條線同時推進多個任務
14-1、分支的好處
- 同時并行推進多個功能開發,提高開發效率
- 各個分支在開發過程中,如果某一個分支開發失敗,不會對其他分支有任何影響。失敗的分支删除重新開始即可
14-2、分支
# 檢視分支
git branch
# 檢視所有分支的最後一次操作
git branch -v
# 檢視目前分支
git branch -vv
# 建立分支
git branch 分支名
# 切換分支
git checkout 分支名
# 删除本地分支
git branch -d 分支名
# 強行删除分支
git branch -D 分支名
# 删除遠處倉庫分支
git branch origin:分支名
# 合并分支
git checkout master
git merge 要合并的分支名 -m "描述"
# or
git merge 要合并的分支名 --no-ff
15、把遠端庫的資料推送到本地庫
# 方式一
git fetch origin master
git checkout origin/master
git log -p master.. origin/master
git checkout master
git merge origin/master
# 方式二
git pull origin master
16、暫存區操作大全
# 将所有未送出的修改(送出到暫存區)儲存至堆棧中
git stash
# 給本次存儲加個備注,以防時間久了忘了
git stash save "存儲"
# 存儲未追蹤的檔案
git stash -u
# 檢視存儲記錄
$ git stash list
在 Windows 上和 PowerShell 中,需要加雙引号
# 恢複後,stash 記錄并不删除
git stash apply "stash@{index}"
# 恢複的同時把 stash 記錄也删了
git stash pop "stash@{index}"
# 删除 stash 記錄
git stash drop "stash@{index}"
# 删除所有存儲的進度
git stash clear
# 檢視目前記錄中修改了哪些檔案
git stash show "stash@{index}"
# 檢視目前記錄中修改了哪些檔案的内容
git stash show -p "stash@{index}"
17、檔案對比
# 檢視工作區和暫存區單個檔案的對比
git diff filename
# 檢視工作區和暫存區所有檔案的對比
git diff
# 檢視工作區和暫存區所有檔案的對比,并顯示出所有有差異的檔案清單
git diff --stat
# 檢視暫存區與上次送出到本地倉庫的快照(即最新送出到本地倉庫的快照)的對比
git diff --cached/--staged
# 檢視工作區與上次送出到本地倉庫的快照(即最新送出到本地倉庫的快照)的對比
git diff branchname
# 檢視工作區與 HEAD 指向(預設目前分支最新的送出)的對比
git diff HEAD
# 檢視兩個本地分支中某一個檔案的對比
git diff branchname..branchname filename
# 檢視兩個本地分支所有的對比
git diff branchname..branchname
# 檢視遠端分支和本地分支的對比
git diff origin/branchname..branchname
# 檢視遠端分支和遠端分支的對比
git diff origin/branchname..origin/branchname
# 檢視兩個 commit 的對比
git diff commit1..commit2
18、遠端倉庫操作
# 檢視所有遠端主機
git remote
# 檢視關聯的遠端倉庫的詳細資訊
git remote -v
# 删除遠端倉庫的 “關聯”
git remote rm projectname
# 設定遠端倉庫的 “關聯”
git remote set-url origin <newurl>
18、釋出标簽
# 預設在 HEAD 上建立一個标簽
git tag v1.0
# 指定一個 commit id 建立一個标簽
git tag v0.9 f52c633
# 建立帶有說明的标簽,用 -a 指定标簽名,-m 指定說明文字
git tag -a v0.1 -m "version 0.1 released"
# 檢視所有标簽
# 注意:标簽不是按時間順序列出,而是按字母排序的。
git tag
# 檢視單個标簽具體資訊
git show <tagname>
# 推送一個本地标簽
git push origin <tagname>
# 推送全部未推送過的本地标簽
git push origin --tags
# 删除本地标簽
# 因為建立的标簽都隻存儲在本地,不會自動推送到遠端。
# 是以,打錯的标簽可以在本地安全删除。
git tag -d v0.1
# 删除一個遠端标簽(先删除本地 tag ,然後再删除遠端 tag)
git push origin :refs/tags/<tagname>
19、.gitignore 配置詳情
#java
*.class
#package file
*.war
*.ear
*.zip
*.tar.gz
*.rar
#maven ignore
target/
build/
#eclipse ignore
.settings/
.project
.classpatch
#Intellij idea
.idea/
/idea/
*.ipr
*.iml
*.iws
# temp file
*.log
*.cache
*.diff
*.patch
*.tmp
# system ignore
.DS_Store
Thumbs.db