Git 常用命令及常見問題記錄

git config

$ git config -l  //查看所有的配置信息,依次是系統(tǒng)級(jí)別、用戶級(jí)別埃难、倉庫級(jí)別
$ git config --global -l // 查看全局

$ git config <key>  //檢查 Git 的某一項(xiàng)配置
$ git config user.name // 查看用戶名
$ git config user.email // 查看用戶郵箱

$ git config --global --edit  //編輯配置文件

// 設(shè)置全局
$ git config --global user.name "Author Name"
$ git config --global user.email "Author Email"
// 設(shè)置當(dāng)前項(xiàng)目庫配置
$ git config user.name "Author Name"
$ git config user.email "Author Email"

//刪除配置信息
$ git config --global --unset user.name  
$ git config --global --unset user.email 

//無需每次都輸入密碼
//輸入密碼后執(zhí)行下面代碼就可以了
$ git config --global credential.helper store

//修改密碼
//如果賬號(hào)密碼有變動(dòng) 用這個(gè)命令
$ git config --system --unset credential.helper

//重新輸入賬號(hào)密碼 應(yīng)該就能解決了
//如果用了第一個(gè)命令 還不能解決問題那么 用這個(gè)命令:
$ git config --global http.emptyAuth true

git clone

$ git clone <版本庫的網(wǎng)址> //與遠(yuǎn)程主機(jī)的版本庫同名
$ git clone <版本庫的網(wǎng)址> <本地目錄名>  //指定不同的目錄名
$ git clone -o <其他的主機(jī)名> <版本庫的網(wǎng)址>  //指定用其他主機(jī)名
//克隆版本庫遠(yuǎn)程主機(jī)自動(dòng)被Git命名為`origin`。如果想用其他的主機(jī)名,`git clone`命令的`-o`選項(xiàng)指定

git remote

為了便于管理,Git要求每個(gè)遠(yuǎn)程主機(jī)都必須指定一個(gè)主機(jī)名卷谈。

`git remote` : 列出所有遠(yuǎn)程主機(jī)
`git remote -v` : 查看遠(yuǎn)程主機(jī)的網(wǎng)址
`git remote show <主機(jī)名>` : 查看該主機(jī)的詳細(xì)信息
`git remote add <主機(jī)名> <網(wǎng)址>` : 添加遠(yuǎn)程主機(jī)
`git remote rm <主機(jī)名>` : 刪除遠(yuǎn)程主機(jī)
`git remote rename <原主機(jī)名> <新主機(jī)名>` : 遠(yuǎn)程主機(jī)的改名

git branch

git branch : 查看本地分支

git branch -a : 查看遠(yuǎn)程分支

git branch branchName : 創(chuàng)建分支

git checkout mybranch : 切換分支

git checkout -b mybranch : 創(chuàng)建并切換分支

git branch -d branchName : 刪除本地分支

git push origin :branch_a : 刪除遠(yuǎn)程分支branch_a
git push origin --delete branch_a : 刪除遠(yuǎn)程分支branch_a

更改本地和遠(yuǎn)程分支的名稱:

git branch -m old_branch new_branch # 修改本地分支名稱
git push origin :old_branch # 刪除遠(yuǎn)程舊的分支 
git push --set-upstream origin new_branch # Push the new branch, set local branch to track the new remote

git fetch

git fetch <遠(yuǎn)程主機(jī)名> : 將某個(gè)遠(yuǎn)程主機(jī)的更新,全部取回本地

git fetch <遠(yuǎn)程主機(jī)名> <分支名> : 只取回特定分支的更新

$ git fetch origin master #取回origin主機(jī)的master分支

git pull

git pull <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名>
取回遠(yuǎn)程主機(jī)某個(gè)分支的更新霞篡,再與本地的指定分支合并

$ git pull origin master:dev #取回origin主機(jī)的master分支世蔗,與本地的dev分支合并
$ git pull origin master #取回origin/master分支,再與當(dāng)前分支合并朗兵。實(shí)質(zhì)上等同于先git fetch污淋,再git merge
$ git fetch origin
$ git merge origin/master

git status

git status : 檢查當(dāng)前文件狀態(tài)輸出十分詳細(xì)

git status -s : 簡短輸出

git diff

查看具體修改了什么地方
git diff : 尚未緩存的改動(dòng)

git diff --stat : 顯示摘要而非整個(gè)diff:

git diff --cached : 查看已緩存的改動(dòng)

git diff HEAD : 查看已緩存的與未緩存的所有改動(dòng)

git diff --staged

git commit

每次準(zhǔn)備提交前,先用 git status 看下余掖,是不是都已暫存起來了寸爆, 然后再運(yùn)行提交命令 git commit

git commit -a -m 'added new benchmarks' 跳過暫存

git commit --amend --no-edit push前 追加提交 不修改提交說明

git rm

git rm log/\*.log : 刪除 log/ 目錄下擴(kuò)展名為 .log 的所有文件

git rm \*~ : 刪除以 ~ 結(jié)尾的所有文件。

git rm -f <file> : 刪除之前修改過并且已經(jīng)放到暫存區(qū)域的文件,加 -f

git rm --cached <file> : 如果把文件從暫存區(qū)域移除而昨,但仍然希望保留在當(dāng)前工作目錄中,換句話說找田,僅是從跟蹤清單中刪除歌憨,加 --cached

git tag

git tag : 列出標(biāo)簽

git tag tagName : 添加標(biāo)簽

git tag -d tagName : 刪除標(biāo)簽

git push origin tagName : 提交標(biāo)簽

git push origin :refs/tags/v0.1 : 刪除遠(yuǎn)程標(biāo)簽 v0.1

git mv

用于移動(dòng)或重命名一個(gè)文件、目錄墩衙、軟連接

git mv file_from file_to

git merge

--no-ff:不使用fast-forward方式合并务嫡,保留分支的commit歷史
--squash:使用squash方式合并,把多次分支commit歷史壓縮為一次

git merge --ff : fast-forward方式就是當(dāng)條件允許的時(shí)候漆改,git直接把HEAD指針指向合并分支的頭心铃,完成合并。屬于“快進(jìn)方式”挫剑,不過這種情況如果刪除分支去扣,則會(huì)丟失分支信息。因?yàn)樵谶@個(gè)過程中沒有創(chuàng)建commit

git merge --squash : 是用來把一些不必要commit進(jìn)行壓縮樊破,比如說愉棱,你的feature在開發(fā)的時(shí)候?qū)懙腸ommit很亂,那么我們合并的時(shí)候不希望把這些歷史commit帶過來哲戚,于是使用--squash進(jìn)行合并奔滑,此時(shí)文件已經(jīng)同合并后一樣了,但不移動(dòng)HEAD顺少,不提交朋其。需要進(jìn)行一次額外的commit來“總結(jié)”一下,然后完成最終的合并

# dev分支的修改合并到master主分支步驟
$ git checkout master    #切換到master主分支
$ git pull origin master #更新代碼
$ git merge dev --no-ff  #dev合并到主分支
$ git push origin master #提交到主分支
$ git branch -d dev      #刪除本地dev分支
$ git push origin --delete dev  #git branch -a 查看遠(yuǎn)程分支脆炎,刪除遠(yuǎn)程dev分支

git push

git push <遠(yuǎn)程主機(jī)名> <本地分支名>:<遠(yuǎn)程分支名> : 將本地分支的更新梅猿,推送到遠(yuǎn)程主機(jī)

git reset

git reset HEAD : 取消之前 git add 添加,但不希望包含在下一提交快照中的緩存
git reset --mixed : 頭指針恢復(fù)腕窥,add的緩存也會(huì)丟失掉粒没,工作空間的代碼不變
git reset --soft : 頭指針恢復(fù),add的緩存不變簇爆,工作空間的代碼不變癞松。如果還要提交,直接commit即可
git reset --hard : 頭指針恢復(fù)入蛆,aad的緩存消失响蓉,本地的源碼也會(huì)變?yōu)樯弦粋€(gè)版本的內(nèi)容,徹底回退到某個(gè)版本

git stash

會(huì)把所有未提交的修改(包括暫存的和非暫存的)都保存起來哨毁,用于后續(xù)恢復(fù)當(dāng)前工作目錄

$ git stash save "save message"   //執(zhí)行存儲(chǔ)時(shí)枫甲,添加備注
$ git stash list  //查看現(xiàn)有stash
$ git stash pop stash@{num} //只能恢復(fù)一次
$ git stash apply stash@{num} //可恢復(fù)多次
$ git stash drop stash@{num} //刪除某個(gè)保存
$ git stash clear //刪除所有保存

常見問題解決

修改本地和遠(yuǎn)程分支的名稱

#將本地分支進(jìn)行改名
$ git branch -m old_branch new_branch

# 刪除遠(yuǎn)程分支
$ git push origin :old_branch
# or
$ git push --delete origin old_branch 

#將改名后的分支push到遠(yuǎn)程
$ git push origin new_branch

撤銷add

$ git reset HEAD . #撤銷所有add文件 
$ git reset HEAD -filename #撤銷單個(gè)add文件 

撤銷commit

$ git log #可查看提交記錄

$ git reset --soft  版本號(hào) 
$ git reset --soft HEAD^  #回到上一個(gè)版本
#不刪除工作區(qū)改動(dòng)的代碼,撤銷commit,不撤銷git add .

$ git reset --mixed 版本號(hào) 
$ git reset --mixed HEAD^  #回到上一個(gè)版本
# 不刪除工作區(qū)改動(dòng)的代碼想幻,撤銷commit粱栖,撤銷git add .

$ git reset --hard 版本號(hào) 
$ git reset --hard HEAD^  #回到上一個(gè)版本
# 刪除工作區(qū)的代碼,撤銷commit脏毯,撤銷git add . 回到上一次commit的狀態(tài)

撤銷commit 未push

$ git log #找到想要撤銷的id 
$ git reset --soft <commit版本號(hào)> 
# 撤銷闹究,但不對(duì)代碼修改撤銷,可通過git commit 重新提交對(duì)本地代碼的修改

撤銷commit 已經(jīng)push

$ git log
$ git reset --hard <commit版本號(hào)> 
#完成撤銷,同時(shí)將代碼恢復(fù)到前一commit_id 對(duì)應(yīng)的版本 
$ git push <遠(yuǎn)程主機(jī)名> <本地分支名>:<遠(yuǎn)程分支名> --force
#要加上force 不然會(huì)提示
#error: failed to push some refs to '地址'
#hint: Updates were rejected because the tip of your current branch is behind

Git也允許手動(dòng)建立追蹤關(guān)系

#指定dev分支追蹤origin/master分支
$ git branch --set-upstream dev origin/master 
#當(dāng)前分支與遠(yuǎn)程分支存在追蹤關(guān)系食店,git pull就可以省略遠(yuǎn)程分支名
$ git pull origin

忽略某個(gè)被追蹤的文件的修改

#如果文件已經(jīng)被跟蹤渣淤,再放到.gitinore可能會(huì)失效,用以下命令來忽略
$ git update-index --assume-unchanged your_file_path 
#撤銷用:
$ git update-index --no-assume-unchanged your_file_path 

把指定的dist文件提交到gh-pages分支上

$ git subtree push --prefix=dist origin gh-pages 

git log 如何退出操作

Q

Git Push 避免用戶名和密碼方法

http://www.cnblogs.com/ballwql/p/3462104.html

#全局配置
$ git config --global user.name "username" 
$ git config --global user.email "email"
$ git config --global credential.helper store
#輸入這個(gè)命令后,只需要輸入一次用戶名密碼

設(shè)置只有自己需要忽略的文件

修改.git/info/exclude文件

gitlab新增分支后吉嫩,本地 git branch -r 看不到新增的分支

$ git fetch --all

gitlab上刪除分支后价认,本地 git branch -r 還能看到

$ git branch -a  #查看所有本地分支和遠(yuǎn)程分支,發(fā)現(xiàn)很多在遠(yuǎn)程倉庫已經(jīng)刪除的分支在本地依然可以看到
$ git remote show origin  #可以查看remote地址,遠(yuǎn)程分支自娩,還有本地分支與之相對(duì)應(yīng)關(guān)系等信息
$ git remote prune --dry-run origin #查看當(dāng)前有哪些是該消失還存在的分支
$ git remote prune origin  #刪除本地那些遠(yuǎn)程倉庫不存在的分支
$ git fetch --prune origin  #如果沒有結(jié)果輸出說明已經(jīng)刪除完成了

git只合并某一個(gè)分支的某個(gè)commit

$ git log  #在對(duì)應(yīng)分支查看要合并的commitid
$ git checkout branch-current  #切換到當(dāng)前分支
$ git cherry-pick commit-id

git pull 報(bào)錯(cuò) refusing to merge unrelated histories

$ git pull origin master --allow-unrelated-histories

git pre -commit hook failed (add --no-verify to bypass)的問題

husky > pre-commit (node v8.9.4)
  ↓ Stashing changes... [skipped]
    → No partially staged files found...
  ? Running linters...
    ? Running tasks for src/**/*.{js,vue}
      ? eslint --fix
        git add
....
....
husky > pre-commit hook failed (add --no-verify to bypass)

命令行已經(jīng)提示了用踩,add --no-verify to bypass

git commit -m "備注" --no-verify

fatal: unable to access 'https://git.aaa.bb/xxx/xxx.git/': Failed to connect to git.aaa.bb port 443: Operation timed out

執(zhí)行g(shù)it pull 時(shí)報(bào)錯(cuò),看了下gitlab的項(xiàng)目地址是帶端口號(hào)的

# 修改遠(yuǎn)程倉庫地址椒功,加上對(duì)應(yīng)的端口號(hào)
$ git remote set-url origin https://git.aaa.bb:端口號(hào)/xxx/xxx.git

相關(guān)鏈接:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捶箱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子动漾,更是在濱河造成了極大的恐慌丁屎,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旱眯,死亡現(xiàn)場離奇詭異晨川,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)删豺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門共虑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人呀页,你說我怎么就攤上這事妈拌。” “怎么了蓬蝶?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵尘分,是天一觀的道長。 經(jīng)常有香客問我丸氛,道長培愁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任缓窜,我火速辦了婚禮定续,結(jié)果婚禮上谍咆,老公的妹妹穿的比我還像新娘。我一直安慰自己私股,他們只是感情好摹察,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著倡鲸,像睡著了一般港粱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上旦签,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音寸宏,去河邊找鬼宁炫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛氮凝,可吹牛的內(nèi)容都是我干的羔巢。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼罩阵,長吁一口氣:“原來是場噩夢啊……” “哼竿秆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起稿壁,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤幽钢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后傅是,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匪燕,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年喧笔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了帽驯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡书闸,死狀恐怖尼变,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情浆劲,我是刑警寧澤嫌术,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站梳侨,受9級(jí)特大地震影響蛉威,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜走哺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一蚯嫌、第九天 我趴在偏房一處隱蔽的房頂上張望哲虾。 院中可真熱鬧,春花似錦择示、人聲如沸束凑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汪诉。三九已至,卻和暖如春谈秫,著一層夾襖步出監(jiān)牢的瞬間扒寄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工拟烫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留该编,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓硕淑,卻偏偏與公主長得像课竣,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子置媳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容