Git的奇技淫巧—關(guān)于Git,搞懂這篇文章就夠了!
AI全套:Python3+TensorFlow打造人臉識別智能小程序
最新人工智能資料-Google工程師親授 Tensorflow-入門到進階
黑馬頭條項目 - Java Springboot2.0(視頻、資料、代碼和講義)14天完整版
Git是一個“分布式版本管理工具”,簡單的理解版本管理工具:大家在寫東西的時候都用過“回撤”這個功能,但是回撤只能回撤幾步,假如想要找回我三天之前的修改,光用“回撤”是找不回來的。而“版本管理工具”能記錄每次的修改,只要提交到版本倉庫,你就可以找到之前任何時刻的狀態(tài)(文本狀態(tài))。
下面的內(nèi)容就是列舉了常用的git命令和一些小技巧,可以通過"頁面內(nèi)查找"的方式進行快速查詢:Ctrl/Command+f。
開卷必讀
如果之前未使用過Git,可以學(xué)習(xí)廖老師的免費Git教程入門
一定要先測試命令的效果后,再用于工作環(huán)境中,以防造成不能彌補的后果!到時候別拿著砍刀來找我
所有的命令都在
git version 2.7.4 (Apple Git-66)下測試通過統(tǒng)一概念:
工作區(qū):改動(增刪文件和內(nèi)容)
暫存區(qū):輸入命令:
git add 改動的文件名,此次改動就放到了‘暫存區(qū)’本地倉庫(簡稱:本地):輸入命令:
git commit 此次修改的描述,此次改動就放到了’本地倉庫’,每個commit,我叫它為一個‘版本’。遠程倉庫(簡稱:遠程):輸入命令:
git push 遠程倉庫,此次改動就放到了‘遠程倉庫’(github等)commit-id:輸出命令:
git log,最上面那行commit xxxxxx,后面的字符串就是commit-id如果喜歡這個項目,歡迎Star、提交Pr、反饋問題

目錄
展示幫助信息
回到遠程倉庫的狀態(tài)
重設(shè)第一個commit
展示工作區(qū)和暫存區(qū)的不同
展示暫存區(qū)和最近版本的不同
展示暫存區(qū)、工作區(qū)和最近版本的不同
快速切換分支
刪除已經(jīng)合并到master的分支
展示所有的分支關(guān)聯(lián)的遠程倉庫
關(guān)聯(lián)遠程分支
刪除本地分支
刪除遠程分支
查看標簽
本地創(chuàng)建標簽
推送標簽到遠程倉庫
刪除本地標簽
刪除遠程標簽
放棄工作區(qū)的修改
回到某一個commit的狀態(tài),并重新增添一個commit
回到某個commit的狀態(tài),并刪除后面的commit
修改上一個commit的描述
查看commit歷史
顯示本地執(zhí)行過git命令
修改作者名
修改遠程倉庫的url
列出所有遠程倉庫
列出本地和遠程分支
列出遠程分支
查看兩個星期內(nèi)的改動
把A分支的某一個commit,放到B分支上
給git命令起別名
存儲當(dāng)前的修改,但不用提交commit
保存當(dāng)前狀態(tài),包括untracked的文件
展示所有stashes
回到某個stash的狀態(tài)
回到最后一個stash的狀態(tài),并刪除這個stash
刪除所有的stash
從stash中拿出某個文件的修改
展示所有tracked的文件
展示所有untracked的文件
展示所有忽略的文件
強制刪除untracked的文件
強制刪除untracked的目錄
重命名分支
展示簡化的commit歷史
查看某段代碼是誰寫的
把某一個分支到導(dǎo)出成一個文件
從包中導(dǎo)入分支
執(zhí)行rebase之前自動stash
從遠程倉庫根據(jù)ID,拉下某一狀態(tài),到本地分支
詳細展示一行中的修改
清除
.gitignore文件中記錄的文件展示所有alias和configs
展示忽略的文件
commit歷史中顯示Branch1有的,但是Branch2沒有commit
在commit log中顯示GPG簽名
刪除全局設(shè)置
新建并切換到新分支上,同時這個分支沒有任何commit
展示任意分支某一文件的內(nèi)容
clone下來指定的單一分支
創(chuàng)建并切換到該分支
忽略文件的權(quán)限變化
展示本地所有的分支的commit
在commit log中查找相關(guān)內(nèi)容
把暫存區(qū)的指定file放到工作區(qū)中
強制推送
增加遠程倉庫
聯(lián)系我
展示幫助信息
git help -g回到遠程倉庫的狀態(tài)
拋棄本地倉庫的所有版本(commit),回到遠程倉庫的狀態(tài)。
git fetch --all && git reset --hard origin/master重設(shè)第一個commit
也就是把所有的改動都重新放回工作區(qū),并清空所有的commit,這樣就可以重新提交第一個commit了
git update-ref -d HEAD展示工作區(qū)和暫存區(qū)的不同
輸出工作區(qū)和暫存區(qū)的different(不同)。
git diff還可以展示本地倉庫中任意兩個commit之間的文件變動:
git diff <commit-id> <commit-id>展示暫存區(qū)和最近版本的不同
輸出暫存區(qū)和本地最近的版本(commit)的different(不同)。
git diff --cached展示暫存區(qū)、工作區(qū)和最近版本的不同
輸出工作區(qū)、暫存區(qū) 和本地最近的版本(commit)的different(不同)。
git diff HEAD快速切換分支
git checkout -刪除已經(jīng)合并到master的分支
git branch --merged master | grep -v '^\*\| master' | xargs -n 1 git branch -d展示所有的分支關(guān)聯(lián)的遠程倉庫
git branch -vv關(guān)聯(lián)遠程分支
關(guān)聯(lián)之后,git branch -vv就可以展示關(guān)聯(lián)的遠程分支名了,同時推送到遠程倉庫直接:git push,不需要指定遠程倉庫了。
git branch -u origin/mybranch或者在push時加上-u參數(shù)
git push origin/mybranch -u刪除本地分支
git branch -d <local-branchname>刪除遠程分支
git push origin --delete <remote-branchname>或者
git push origin :<remote-branchname>查看標簽
git tag展示當(dāng)前分支的最近的tag
git describe --tags --abbrev=0本地創(chuàng)建標簽
git tag <version-number>默認tag是打在最近的一次commit上,如果需要指定commit打tag:
$ git tag -a <version-number> -m "v1.0 發(fā)布(描述)" <commit-id>推送標簽到遠程倉庫
首先要保證本地創(chuàng)建好了標簽才可以推送標簽到遠程倉庫:
git push origin <local-version-number>一次性推送所有標簽,同步到遠程倉庫:
git push origin --tags刪除本地標簽
git tag -d <tag-name>刪除遠程標簽
刪除遠程標簽需要先刪除本地標簽,再執(zhí)行下面的命令
git push origin :refs/tags/<tag-name>放棄工作區(qū)的修改
git checkout <file-name>放棄所有修改:
git checkout .回到某一個commit的狀態(tài),并重新增添一個commit
git revert <commit-id>回到某個commit的狀態(tài),并刪除后面的commit
和revert的區(qū)別:reset命令會抹去某個commit id之后的所有commit
git reset <commit-id>修改上一個commit的描述
git commit --amend查看commit歷史
git log查看某段代碼是誰寫的
blame的意思為‘責(zé)怪’,你懂的。
git blame <file-name>顯示本地執(zhí)行過git命令
就像shell的history一樣
git reflog修改作者名
git commit --amend --author='Author Name <[email protected]>'修改遠程倉庫的url
git remote set-url origin <URL>列出所有遠程倉庫
git remote列出本地和遠程分支
-a參數(shù)相當(dāng)于:all
git branch -a列出遠程分支
-r參數(shù)相當(dāng)于:remote
git branch -r查看兩個星期內(nèi)的改動
git whatchanged --since='2 weeks ago'把A分支的某一個commit,放到B分支上
這個過程需要cherry-pick命令,參考
git checkout <branch-name> && git cherry-pick <commit-id>給git命令起別名
簡化命令
git config --global alias.<handle> <command>
比如:git status 改成 git st,這樣可以簡化命令
git config --global alias.st status存儲當(dāng)前的修改,但不用提交commit
詳解可以參考廖雪峰老師的git教程
git stash保存當(dāng)前狀態(tài),包括untracked的文件
untracked文件:新建的文件
git stash -u展示所有stashes
git stash list回到某個stash的狀態(tài)
git stash apply <stash@{n}>回到最后一個stash的狀態(tài),并刪除這個stash
git stash pop刪除所有的stash
git stash clear從stash中拿出某個文件的修改
git checkout <stash@{n}> -- <file-path>展示所有tracked的文件
git ls-files -t展示所有untracked的文件
git ls-files --others展示所有忽略的文件
git ls-files --others -i --exclude-standard強制刪除untracked的文件
可以用來刪除新建的文件。如果不指定文件文件名,則清空所有工作的untracked文件。clean命令,注意兩點:
1. clean后,刪除的文件無法找回 2. 不會影響tracked的文件的改動,只會刪除untracked的文件
git clean <file-name> -f強制刪除untracked的目錄
可以用來刪除新建的目錄,注意:這個命令也可以用來刪除untracked的文件。詳情見上一條
git clean <directory-name> -df重命名分支
git branch -m <new-branch-name>展示簡化的commit歷史
git log --pretty=oneline --graph --decorate --all把某一個分支到導(dǎo)出成一個文件
git bundle create <file> <branch-name>從包中導(dǎo)入分支
新建一個分支,分支內(nèi)容就是上面git bundle create命令導(dǎo)出的內(nèi)容
git clone repo.bundle <repo-dir> -b <branch-name>執(zhí)行rebase之前自動stash
git rebase --autostash從遠程倉庫根據(jù)ID,拉下某一狀態(tài),到本地分支
git fetch origin pull/<id>/head:<branch-name>詳細展示一行中的修改
git diff --word-diff清除gitignore文件中記錄的文件
git clean -X -f展示所有alias和configs
git config --list展示忽略的文件
git status --ignoredcommit歷史中顯示Branch1有的,但是Branch2沒有commit
git log Branch1 ^Branch2在commit log中顯示GPG簽名
git log --show-signature刪除全局設(shè)置
git config --global --unset <entry-name>新建并切換到新分支上,同時這個分支沒有任何commit
相當(dāng)于保存修改,但是重寫commit歷史
git checkout --orphan <branch-name>展示任意分支某一文件的內(nèi)容
git show <branch-name>:<file-name>clone下來指定的單一分支
git clone -b <branch-name> --single-branch
https://github.com/user/repo.git創(chuàng)建并切換到該分支
git checkout -b <branch-name>忽略文件的權(quán)限變化
不再將文件的權(quán)限變化視作改動
git config core.fileMode false展示本地所有的分支的commit
最新的放在最上面
git for-each-ref --sort=-committerdate --format='%(refname:short)'
refs/heads/在commit log中查找相關(guān)內(nèi)容
通過grep查找,given-text:所需要查找的字段
git log --all --grep='<given-text>'把暫存區(qū)的指定file放到工作區(qū)中
git reset <file-name>強制推送
git push -f <remote-name> <branch-name>增加遠程倉庫
git remote add origin <remote-url>往期資源:
