git常用命令和常見(jiàn)問(wèn)題

基本命令

git  init   初始化一個(gè)本地倉(cāng)庫(kù)
git status  顯示暫存區(qū)與倉(cāng)庫(kù)區(qū)的差異
git log 查看提交記錄
git show commit 查看某次提交的詳細(xì)(commit為commit 后的那一串)
git show 查看最新一次提交
git add  --all     file path   添加文件到本地庫(kù)(file path為文件路徑)
git commit -m“describe” 提交到本地庫(kù)(describe為提交說(shuō)明)
git commit -a -m"describe" 添加所有到本地并提到本地
git pull     拉取遠(yuǎn)程庫(kù)最新文件   
git push    推送到遠(yuǎn)程倉(cāng)庫(kù)
git merge  branchName  合并(把branchName 分支合并到當(dāng)前分支)
git branch  查看所有分支
git checkout  filepath  假如filepath文件被刪除則會(huì)回復(fù),如果被修改則恢復(fù)之前的狀態(tài)(預(yù)測(cè)是這樣)
git checkout  branchName (切換到branchName分支)
git checkout -b branchName(新建一個(gè)branchName分支,如果branchName分支已經(jīng)存在會(huì)提示“ A branch named 'test2' already exists.”效果等同于    git branch branchName;git checkout branchName)
git branch -d branchName  刪除branchName 分支(不能刪除當(dāng)前分支,需要在其他分支刪除branchName分支)
git commit --amend   修改已經(jīng)提交的日志 
git show commit fileName  查看某次commit中具體某個(gè)文件的修改,沒(méi)有修改就只有文件名
git rm -r --cached .    GIT 在提交之前撤銷(xiāo)add操作使用

git diff branchName1 branchName2 --stat 顯示兩個(gè)分支所有有差異的文件列表
git diff branchName1 branchName2 顯示所有有差異的文件的詳細(xì)差異
git diff branchName1 branchName2  filepath  顯示指定文件filepath詳細(xì)差異

git status 先看一下add 中的文件
git reset HEAD 如果后面什么都不跟的話(huà) 就是上一次add 里面的全部撤銷(xiāo)了
git reset HEAD XXX/XXX/XXX.java 就是對(duì)某個(gè)文件進(jìn)行撤銷(xiāo)了

如果不小心 弄錯(cuò)了 git add后 , 又 git commit 了。(還沒(méi)push)
先使用
git log 查看節(jié)點(diǎn)
然后
git reset commitId

git reset commit_id (回退到上一個(gè) 提交的節(jié)點(diǎn) 代碼還是原來(lái)你修改的)
git reset –hard commit_id (回退到上一個(gè)commit節(jié)點(diǎn), 代碼也發(fā)生了改變,變成上一次的)

還原已經(jīng)提交的修改
此次操作之前和之后的commit和history都會(huì)保留,并且把這次撤銷(xiāo)作為一次最新的提交
git revert HEAD 撤銷(xiāo)前一次 commit
git revert HEAD^ 撤銷(xiāo)前前一次 commit
git revert commit-id (撤銷(xiāo)指定的版本,撤銷(xiāo)也會(huì)作為一次提交進(jìn)行保存)
git revert是提交一個(gè)新的版本,將需要revert的版本的內(nèi)容再反向修改回去,版本會(huì)遞增,不影響之前提交的內(nèi)容。

git 代碼暫存指令:git stash
git 代碼暫存列表信息:git stash list
git 代碼應(yīng)用暫存代碼:git stash apply stash@{1}
git stash clear  清除暫存
git diff hash1 hash2 --stat 對(duì)比兩次提交的不同


clear 清屏

source tree Git界面化工具

git log 中文顯示亂碼

git config --global core.quotepath false;
git config --global gui.encoding utf-8;
git config --global i18n.commit.encoding utf-8;
git config --global i18n.logoutputencoding utf-8;
export LESSCHARSET=utf-8;

git 解決 fatal: Out of memory, malloc failed (tried to allocate 524288000 bytes ) 問(wèn)題

git config http.postBuffer 0
git config --global http.postBuffer 0

每次都要輸密碼問(wèn)題

git config credential.helper store

這里沒(méi)有--global意思是指只對(duì)這個(gè)倉(cāng)庫(kù)生效,建議以后都不要加--global讓代碼配置以倉(cāng)庫(kù)為單位存儲(chǔ)就好,設(shè)置成全局不靈活打開(kāi).git文件夾的.config文件,會(huì)發(fā)現(xiàn)多了兩行

[credential]

helper=storegit

push 到遠(yuǎn)程倉(cāng)庫(kù),輸入用戶(hù)名和密碼,注意要輸入正確的

再次運(yùn)行g(shù)it push 就不用輸入用戶(hù)名和密碼了在用戶(hù)主目錄文件夾多了一個(gè)文件git-credentials,這個(gè)就是用來(lái)存儲(chǔ)用戶(hù)名和密碼的

也可以在第2步時(shí)指定此文件文件名和存儲(chǔ)位置

--file ~/git-credentials

~代表當(dāng)前目錄

也可以使用創(chuàng)建windows系統(tǒng)環(huán)境變量的方式,道理都是一樣,讓系統(tǒng)知道去哪里找這個(gè)用戶(hù)名和密碼就好

身份驗(yàn)證失敗,重新驗(yàn)證 控制面板\用戶(hù)帳戶(hù)\憑據(jù)管理器配置憑證

git config --system --unset credential.helper

之后再進(jìn)行g(shù)it操作時(shí),彈出用戶(hù)名密碼窗口,輸入即可

打印所有標(biāo)簽 git tag

打印符合檢索條件的標(biāo)簽 git tag -l 1.*.* 
查看對(duì)應(yīng)標(biāo)簽狀態(tài) git checkout 1.0.0 
創(chuàng)建輕量標(biāo)簽 git tag 1.0.0-light 
創(chuàng)建帶備注標(biāo)簽(推薦) git tag -a 1.0.0 -m "這是備注信息" 
針對(duì)特定commit版本SHA創(chuàng)建標(biāo)簽 git tag -a 1.0.0 0c3b62d -m "這是備注信息"
刪除標(biāo)簽(本地) git tag -d 1.0.0 
將本地標(biāo)簽發(fā)布到遠(yuǎn)程倉(cāng)庫(kù) 發(fā)送所有 git push origin --tags
指定版本發(fā)送 git push origin 1.0.0 
刪除遠(yuǎn)程倉(cāng)庫(kù)對(duì)應(yīng)標(biāo)簽 // Git版本 > V1.7.0 git push origin --delete 1.0.0 // 舊版本Git git push origin :refs/tags/1.0.0

如指定關(guān)鍵字為“init”的所有提交

git log --grep=init

篩選查看日志

git log --since="July 7"  查7月7號(hào)之后的log
git log --before="July 7"查7月7號(hào)之前的log
git log --author="作者"   只看這個(gè)人提交的
git log --pretty=oneline 單行顯示提交id和日志
git log --pretty=format:"%h - %an, %ar : %s"格式化顯示提交日志
    
   選項(xiàng)
說(shuō)明
%H 提交的完整哈希值
%h 提交的簡(jiǎn)寫(xiě)哈希值
%T 樹(shù)的完整哈希值
%t 樹(shù)的簡(jiǎn)寫(xiě)哈希值
%P 父提交的完整哈希值
%p 父提交的簡(jiǎn)寫(xiě)哈希值
%an 作者名字
%ae 作者的電子郵件地址
%ad 作者修訂日期(可以用--date =選項(xiàng)來(lái)定制格式)
%ar 作者修訂日期,按多久以前的方式顯示
%cn 提交者的名字
%ce 提交者的電子郵件地址
%cd 提交日期
%cr 提交日期(距今多長(zhǎng)期)
%s 提交說(shuō)明 
    
git log dev ^master 查看 dev 有,而 master 中沒(méi)有的
git log master..dev 查看 dev 中比 master 中多提交了哪些內(nèi)容
git log dev...master 不知道誰(shuí)提交的多誰(shuí)提交的少,單純想知道有什么不一樣
git log --left-right dev...master在上述情況下,再顯示出每個(gè)提交是在哪個(gè)分支上注意 commit 后面的箭頭,根據(jù)我們?cè)?–left-right dev…master 的順序,左箭頭 < 表示是 dev 的,右箭頭 > 表示是 master的。

在 git commit 的時(shí)候會(huì)出現(xiàn) MERGE_HEAD 沖突:

error: You have not concluded your merge (MERGE_HEAD exists).
hint: Please, commit your changes before merging.
fatal: Exiting because of unfinished merge.
基本上,使用保留本地修改的方式就可以解決這個(gè)沖突:
git merge --abort
git reset --merge
git pull
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容