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)鏈接:
- Git簡明指南
- Git 完整命令手冊地址:http://git-scm.com/docs
- PDF 版命令手冊:http://www.runoob.com/manual/github-git-cheat-sheet.pdf
- https://git-scm.com/book/zh/v2
- http://www.runoob.com/git/git-basic-operations.html
- http://www.ruanyifeng.com/blog/2014/06/git_remote.html
- https://www.cnblogs.com/cheneasternsun/p/5952830.html