天天看點

【Git】540- 高頻使用的 Git 指令

【Git】540- 高頻使用的 Git 指令

作者:CRPER

前言

彙總下我在項目中高頻使用的git指令及姿勢。

不是入門文檔,官方文檔肯定比我全面,這裡是結合實際業務場景輸出。

使用的 Git版本:git version 2.24.0

指令

git log

# 輸出概要日志,這條指令等同于
# git log --pretty=oneline --abbrev-commit
git log --oneline

# 指定最近幾個送出可以帶上 - + 數字
git log --oneline -5

# 提供類似 GUI 工具的 log 展示
git log --graph --date=relative --pretty=tformat:'%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%an %ad)%Creset'      

檢視日志,正常操作,必備

【Git】540- 高頻使用的 Git 指令

git status

檢視工作區狀态的東東,不如GUI直覺,但是指令行也有一些用的

git status
git status -s
git status --show-stash
git checkout      

用來切換到對應記錄的,可以基于分支,送出,标簽。

切送出和标簽一般用來熱修複或者老版本需要加新特性。

git checkout dev

git checkout origin/test

git checkout --track origin/feature-test

git checkout -b testbranch

git checkout -- file

git checkout .

git checkout -      

git commit

天天打交道的指令,這裡說一些很常見的姿勢

git commit --amend --no-edit

git commit --no-verify -m "xxx"

git commit -m "xxx"

git commit -t templateFile

git commit -F      

git reset

不得不說,代碼復原中這個指令也是用的很多,而且是 ​

​--hard​

git reset --hard commit_sha1
git reset --soft commit_sha1
git reset --soft HEAD~1
git reset --mixed commit_sha1
git reset --merge commit_sha1
git reset --keep commit_sha1      

git revert

一般用于master 的代碼復原,因為多人在上面協作,

​revert​

​ 可以平穩的復原代碼,但卻保留送出記錄,不會讓協作的人各種沖突

git revert commit-sha1      

git rebase

變基在項目中算是很頻繁的,為什麼這麼說。

比如你開發一個新的 feature, 遵循最小化代碼送出的理念。

在整個功能開發完畢的時侯,會有非常多的 commit,用 ​

​rebase​

​ 可以讓我們的commit記錄很幹淨

git rebase -i git-sha1|branch(HEAD)
git rebase --continue
git rebase --skip
git rebase --abort      
【Git】540- 高頻使用的 Git 指令
  • pick: 是保留該 commit(采用)
  • edit: 一般你送出的東西多了,可以用這個把東東拿回工作區拆分更細的 commit
  • reword: 這個可以重新修改你的 commit msg
  • squash: 内容保留,把送出資訊往上一個 commit 合并進去
  • fixup: 保留變動内容,但是抛棄 commit msg
  • drop: 用的比較少,無用的改動你會送出麼!!!

突然發現截圖還有幾個新的行為,估計是新版本帶來的,

從字面上就可以看出來大體的意思, 就是把復原和打标簽這些放到變基中簡化操作。

溫馨提示:

  • 本地送出之前,最好把基準點變為需要合并的分支,這樣送出 PR/MR 的時侯就不會沖突(本地來解決沖突)
  • 不要在公共分支上變基!!!一變其他協作者基本都一堆沖突!除非你們有很清晰的分支管理機制

git merge

git merge --no-ff branchName      

git pull

​git pull​

​中用的最多是帶​

​--rebase(-r)​

​的方式(變基形式拉取合并代碼),保持分支一條線。

預設的​

​pull​

​會走​

​ff​

​模式,多數情況會産生新的commit,部分參數與 ​

​merge​

​提供一緻。

git push

當本地分支存在,遠端分支不存在的時侯,可以這樣推送關聯的遠端分支

git push origin localbranch
git push -d origin branchName
git push --tags
git push --follow-tags
git push -f origin branchName
git push --force-with-lease      

git remote

這個東西用在你需要考慮維護多個地方倉庫的時侯會考慮,或者修改倉庫源的時侯

git remote add origin url
git remote add github url
git remote set-url  origin(或者其他上遊域) url      

git branch

該指令用的最多的就是删除本地分支,重命名分支,删除遠端分支了

git branch -d branchName
git branch -M oldBranch newNameBranch
git branch --set-upstream-to=origin/xxx
git branch --set-upstream-to origin xxx      

git stash

暫存用的最多時侯就是你撸代碼撸到一半,突然說有個緊急 BUG 要修正。

或者别人在你這裡需要幫忙排查代碼,你這時候也會用到。

強烈建議給每個 ​

​stash​

​ 添加描述資訊!!!

git stash save stashName
git stash -u save stashName
git stash push -m "更改了 xx"
git stash apply stash@{0}
git stash pop stash@{0}
git stash list
git stash clear 
git stash drop stash@{0}
git stash show stash@{0}      

git reflog

這個指令的強大之處,是記錄了所有行為,包括你 ​

​rebase,merge, reset​

​ 這些

當我們不小心硬復原的時侯,或變基錯了都可以在這裡找到行為之前的commit,然後復原。

當然這個時間回溯也隻在本地有用,你推送到遠端分支的破壞性改動,該涼還是得涼。

git reflog -5      

git cherry-pick

這個東西你可以了解為你去買橘子,你會專門挑一些符合心意的橘子放到購物籃中。

你可以從多個分支同時挑取部分需要的 commit 合并到同一個地方去,是不是賊騷。

這貨和變基有點類似,但是僅僅類似,挑過來的 commit 若是沒有沖突則追加。

有沖突會中斷,解決後 ​

​--continue​

git cherry-pick commit-sha1
git cherry-pick master~4 master~2
git cherry-pick startGitSha1..endGitSha1      

git rm

這個指令在舊的版本用的比較最多的姿勢是為了重新索引.gitignore 的範圍

git rm --cache -- file
git rm -r --cached .
git add .
git commit -m "xxx"      

git rev-parse

這個估計一般人用的不是很多,可以通過這個快速擷取部分git 倉庫的資訊

我在弄腳本的時侯就會從這裡拿東西

git rev-parse --short HEAD --verify
git rev-parse --show-toplevel
git rev-parse --git-dir
git rev-parse --all      

git diff

對于這個指令,在終端比對用的不是很頻繁,除了少量改動的時侯可能會用這個看看。

其他情況下我更傾向于用 GUI 工具來看,因為比對更加直覺。

總結

git 的常用指令其實很好掌握,很多指令都有 Linux 的影子。

列出來的指令都是高頻使用的,或許有一些更騷的姿勢沒有摸索到,

有更好建議的,或者發現不對之處的請留言,會及時修正,謝謝閱讀。