整理一下 git 命令,用時(shí)總會(huì)忘記。
Git常用命令
- git 克隆遠(yuǎn)程分支倉(cāng)庫(kù)
git 克隆遠(yuǎn)程倉(cāng)庫(kù)項(xiàng)目時(shí)如果不指定分支,只會(huì)克隆默認(rèn)分支內(nèi)容
git clone -b 分支名稱 遠(yuǎn)程地址
- 查看 git 用戶名和郵箱
git config user.name
git config user.email
- 設(shè)置 git 賬號(hào)
git config --global user.ame "foo"
git config --global user.email "foo@email.com"
git config user.name "foo"
git config user.email "foo@mail@com"
- 查看 git 賬號(hào)
git config --global --list
git config --local --list
- 僅查看某一項(xiàng)配置
git config --local user.name
- 分支相關(guān)命令操作
git branch (查看當(dāng)前分支)
git branch -a (查看所有分支)
git branch 分支名 (創(chuàng)建分支)
git branch -d 分支名(刪除分支)
git branch D 分支名 (強(qiáng)制刪除未合并的分支)
git checkout 分支名 (切換到對(duì)應(yīng)分支)會(huì)自動(dòng)將代碼更新為分支代碼
git checkout -b 分支名 (`基于分支名或commit值` 切換分支并直接切換過(guò)去)
- 查看 git 歷史命令
history
- 按照關(guān)鍵詞搜索 git 歷史命令
history | grep push
- 查看 commit 歷史
git log
git log --summary (--summary 查看已經(jīng)提交的文件詳細(xì)變化)
- 對(duì)比2個(gè)分支的日志
git log dev..master
- 回滾本次修改
git reset HEAD foo.js
git checkout -- foo.js
- 查看本次修改的代碼
git diff
git diff HEAD
git diff --staged
- 提交后發(fā)現(xiàn)丟了幾個(gè)文件未提交
// 重新添加
git add "*.html"
// 重新提交
git commit --amend
- 緩存某種后綴的文件
git add "*.js"
- 清除緩存區(qū)中的文件
git reset 文件路徑
- 徹底刪除某種后綴的文件
git rm "*.html"
- 合并分支
git merge 分支名
- 取消合并
git merge --abort
- add . 之取消提交某些文件
git checkout -- <文件路徑>
- 隱藏當(dāng)前修改代碼 保存至堆棧中
git stash
git stash save "命名"
- 釋放堆棧中的代碼
// 將當(dāng)前stash中的內(nèi)容彈出,并應(yīng)用到當(dāng)前分支對(duì)應(yīng)的工作目錄上 `注:該命令將堆棧中最近保存的內(nèi)容刪除(棧是先進(jìn)后出)`
git stash pop
// 釋放指定代碼
git stash pop stash@{0}
- 查看堆棧(stash)目錄
git stash list
- 刪除某個(gè) stash
// `stash@{0} 為棧中名稱`
git stash drop stash@{0}
- 清除 stash 所有內(nèi)容
git stash clear
- 誤刪除stash
git fsck --unreachable |
grep commit | cut -d\ -f3 |
xargs git log --merges --no-walk --grep=WIP
// 找到對(duì)應(yīng)的 commit hash值
git stash apply hash值
- 刪除遠(yuǎn)程分支(次分支必須是非默認(rèn)分支)
git push origin --delete branchname
- 已經(jīng)commit,強(qiáng)制退回到舊版本
git log // 找到對(duì)應(yīng) commit hash 值
git reset --hard hash值
- 回退一次commit
git revert Head/[commit hash]
- 設(shè)置遠(yuǎn)程倉(cāng)庫(kù)地址
git remote set-url origin git@foo.bar.com:a/hello.git
- 本地創(chuàng)建了新分支,但是 origin 沒(méi)有,push代碼前
git push --set-upstream origin preproduction
- 指定 tag 到遠(yuǎn)程
git push origin <tag_name>
- 將全部 tag 推送到遠(yuǎn)程
git push --tags
- 查看當(dāng)前 tags
git tag --list
- 僅刪除index 不刪除 working tree的.idea文件
// --cached 僅刪除index, -r(recursive) 遞歸刪除.idea目錄下的所有文件
git rm --cached -r .idea
- git 主動(dòng) track 文件,控制文件,做好提交準(zhǔn)備
git add <file(s)>/.
- git unstage 文件,釋放文件 選擇性控制
git reset HEAD <file(s)>/.
- 暫存區(qū)文件如何覆蓋工作目錄文件
git reset HEAD <file(s)>/. && git checkout -- <files>/.
- 提交已經(jīng)被 git 管理,修改過(guò)為紅色的所有文件
git add -u
- 重置工作區(qū)和暫存區(qū)的所有文件為原始狀態(tài)
git reset --hard
- 比較當(dāng)前分支與某次提交的區(qū)別
git diff HEAD [commit has fragment]
- 同步到 remote 后,合并多個(gè) commit 為1個(gè)
git rebase -i HEAD~2/hash
pick && squash
:wq!
- 查看項(xiàng)目的 origin 代表地址
git remote -v
- pick 中途誤退出
git rebase --abort
- 未同步到 remote,重新提交
reset soft
- 撤銷遠(yuǎn)程分支錯(cuò)誤提交
...reset
git push --force
- 誤刪除領(lǐng)先遠(yuǎn)程的本地如何恢復(fù)
git reflog // 找出最新的commit sha1值HEAD@{1}比HEAD@{2}新
git branch branchName <sha1>
- git fetch 與 git pull的區(qū)別
git fetch 更新 origin/*下所有的分支,在發(fā)布git flow feature 前很有用,用于更新remote分支
git pull 主要用來(lái)更新多人合作的當(dāng)前分支,多用于更新local分支
- 遠(yuǎn)程刪除分支,本地git fetch 不能更新到最新分支
git fetch --prune
`-prune: Before fetching, remove any remote-tracking references that no longer exist on the remote.`
- 及時(shí)查看本地所有分支狀態(tài)
git remote show origin
-假如遠(yuǎn)程已經(jīng)不存在分支,git fetch --prune也更新不到狀態(tài),該如何做?
git push origin --delete feature/fix-chat-unread-msg-async
- 刪除單個(gè)脫離的遠(yuǎn)程分支
git remote prune <name>
- 添加.gitignore后的文件名,.gitignore不生效
git rm -r --cached 文件名
- git 工作區(qū)和暫存區(qū)的區(qū)別
add commit
工作目錄 ------------> 暫存區(qū) ------------> 版本歷史
暫存區(qū):git已經(jīng)獲得了對(duì)文件的管理權(quán)限,暫存區(qū)文件有狀態(tài):new file,deleted,modified等等。
版本歷史:git log查看每一次commit記錄。