設(shè)置user的name和email
設(shè)置name: $ git config --global user.name "xxx"
設(shè)置email:git config --global user.email "email@gmail.com"
===============================常用操作_start===============================
常用操作
推送本地分支關(guān)聯(lián)遠(yuǎn)程
git push --set-upstream origin 分支名
從遠(yuǎn)程倉(cāng)庫(kù)里拉取一條本地不存在的分支時(shí)git checkout -b 本地分支名 origin/遠(yuǎn)程分支名
git fetch
是將遠(yuǎn)程主機(jī)的最新內(nèi)容拉到本地,用戶(hù)在檢查了以后決定是否合并到工作本機(jī)分支中贪磺。
而git pull
則是將遠(yuǎn)程主機(jī)的最新內(nèi)容拉下來(lái)后直接合并搁进,即:git pull = git fetch + git merge
逞敷,這樣可能會(huì)產(chǎn)生沖突,需要手動(dòng)解決。
git fetch <遠(yuǎn)程主機(jī)名>
這個(gè)命令將某個(gè)遠(yuǎn)程主機(jī)的更新全部取回本地
提交:
git add .
提交:
git commit -m '備注'
推送本地分支到某一遠(yuǎn)程分支,也可以直接git push,則為推送和當(dāng)前本地分支同名的遠(yuǎn)程分支:
git push origin 本地分支:遠(yuǎn)程分支
刪除本地分支:
git branch -d 本地分支名
刪除遠(yuǎn)程分支名
git push origin --delete 遠(yuǎn)程分支名
git push origin :遠(yuǎn)程分支名
#刪除遠(yuǎn)程分支名(這個(gè)方法是推送一個(gè)空分支到遠(yuǎn)程分支趣钱,從而刪除)
重命名:
重命名本地分支
git branch -m 原本地分支名 重命名后的本地分支名
重命名遠(yuǎn)程分支。
在git中重命名遠(yuǎn)程分支胚宦,其實(shí)就是先刪除遠(yuǎn)程分支首有,然后重命名本地分支,再重新提交一個(gè)遠(yuǎn)程分支枢劝。
gitignore無(wú)效的情況
問(wèn)題
在.gitignore文件中添加某文件绞灼,想對(duì)其進(jìn)行忽略,但是通過(guò)git status查看仍然顯示該文件的狀態(tài)呈野。
原因
在git庫(kù)中已經(jīng)存在該文件(以前push過(guò))低矮,而.gitignore僅對(duì)還沒(méi)有加入到版本管理的的文件起作用
解決辦法:
在git庫(kù)中刪除該文件(或者先移到項(xiàng)目目錄外),并提交
拉取遠(yuǎn)程分支
git fetch origin branchname:branchname
(不會(huì)切換到新分支)
可以把遠(yuǎn)程某各分支拉去到本地的branchname下被冒,如果沒(méi)有branchname军掂,則會(huì)在本地新建branchname
把要合并的本地分支合并到當(dāng)前分支
git merge 要合并過(guò)來(lái)的本地分支
修改遠(yuǎn)程地址 (查詢(xún)當(dāng)前遠(yuǎn)程地址:git remote -v)
- 方法一:直接修改
git remote set-url origin 新遠(yuǎn)程倉(cāng)庫(kù)地址
- 方法二:先刪除,后添加
git remote rm origin
#刪除遠(yuǎn)程分支
git remote add origin 新遠(yuǎn)程倉(cāng)庫(kù)地址
#重新添加遠(yuǎn)程分支
- 新增其他遠(yuǎn)程倉(cāng)庫(kù)
git remote add repo1 <repository-url-1> # 新增第一個(gè)遠(yuǎn)程倉(cāng)庫(kù)
git remote add repo2 <repository-url-2># 新增第二個(gè)遠(yuǎn)程倉(cāng)庫(kù)
# repository-url-1和repository-url-2是對(duì)應(yīng)倉(cāng)庫(kù)url
# repo1 和repo2隨便起昨悼,等于別名
git push repo1 master # 推送master到第一個(gè)遠(yuǎn)程倉(cāng)庫(kù)
git push repo2 master # 推送master到第二個(gè)遠(yuǎn)程倉(cāng)庫(kù)
gitremote命令用于管理遠(yuǎn)程倉(cāng)庫(kù)蝗锥,在本地倉(cāng)庫(kù)中添加、刪除和查看遠(yuǎn)程倉(cāng)庫(kù)率触,所以添加的遠(yuǎn)程倉(cāng)庫(kù)终议,只在本地,不會(huì)在遠(yuǎn)程葱蝗。
git remote -v:查看當(dāng)前所有遠(yuǎn)程倉(cāng)庫(kù)的詳細(xì)信息穴张,包括名稱(chēng)和URL
git remote rename:重命名一個(gè)遠(yuǎn)程倉(cāng)庫(kù)的名稱(chēng)。
git remote remove:刪除一個(gè)遠(yuǎn)程倉(cāng)庫(kù)两曼,使其不再與本地倉(cāng)庫(kù)關(guān)聯(lián)
git remote show : 查看所有遠(yuǎn)程倉(cāng)庫(kù)
# 設(shè)置git push的默認(rèn)分支
git branch --set-upstream-to=origin/<branch_name>
這個(gè)命令會(huì)將你當(dāng)前的分支設(shè)置為跟蹤指定的遠(yuǎn)程分支皂甘。意思是本來(lái)dev分支是默認(rèn)推送到遠(yuǎn)程的dev分支,現(xiàn)在這樣就可以悼凑,dev默認(rèn)推送到test分支
# 你可以在第一次push到遠(yuǎn)程倉(cāng)庫(kù)的時(shí)候偿枕,使用-u選項(xiàng)來(lái)指定默認(rèn)的上游倉(cāng)庫(kù):
git push -u <origin> <branch_name> # git push -u repo1 master
這個(gè)命令會(huì)將origin設(shè)置為你的默認(rèn)遠(yuǎn)程倉(cāng)庫(kù),并將你當(dāng)前的分支設(shè)置為跟蹤指定的遠(yuǎn)程分支户辫。
# 查詢(xún)默認(rèn)遠(yuǎn)程倉(cāng)庫(kù) :在倉(cāng)庫(kù)根目錄輸入git config -e或者cat .git/config
--------------------------------------------------------------
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@e.coding.net:shuaiqifeng/webhook.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = repo1
merge = refs/heads/master
[remote "repo1"]
url = git@gitee.com:fizz001/webhook.git
fetch = +refs/heads/*:refs/remotes/repo1/*
--------------------------------------------------------------
其中[branch "master"]的信息就是顯示默認(rèn)遠(yuǎn)程分支了
創(chuàng)建并切換分支
git checkout -b 分支名
查看兩個(gè)提交之間修改過(guò)的文件
git diff --name-only <commitId-1> <commitId-2>
注意:commitId 為前八位
本地測(cè)試git
- 新建一個(gè)目錄a渐夸,然后執(zhí)行g(shù)it init,然后再執(zhí)行pwd,復(fù)制路徑url
- 新建另一個(gè)目錄b,然后執(zhí)行渔欢,用上面目錄a步驟的url墓塌,執(zhí)行g(shù)it clone url(若是項(xiàng)目在其他的服務(wù)器,則git clone 用戶(hù)名(能打通ssh的用戶(hù))@ip(內(nèi)網(wǎng)ip):/url)
- 若b的目錄需要push,則a目錄的分支不能停在master,不然push不上去桃纯,需要切換到另外的分支酷誓。
===============================常用操作_end===============================
===============================遠(yuǎn)程倉(cāng)庫(kù)_start===============================
遠(yuǎn)程倉(cāng)庫(kù)
注:
- 本地和遠(yuǎn)程第一次操作時(shí)需要關(guān)連:加上-u參數(shù)披坏。
- git不但會(huì)把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支态坦,還會(huì)把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來(lái),在以后的推送或者拉取時(shí)就可以簡(jiǎn)化命令棒拂。
git push -u 遠(yuǎn)程倉(cāng)庫(kù)分支 本地倉(cāng)庫(kù)分支:
eg:$ git push -u origin master
- 切換關(guān)聯(lián)的遠(yuǎn)程分支
$git branch --set-upstream-to=origin/remote_branch your_branch #remote_branch是遠(yuǎn)程分支名 your_branch是本地分支名
eg:git branch --set-upstream-to=origin/story_v540 story_550
1.先有本地倉(cāng)庫(kù)伞梯,然后關(guān)聯(lián)遠(yuǎn)程倉(cāng)庫(kù)
要關(guān)聯(lián)一個(gè)遠(yuǎn)程庫(kù),使用命令$ git remote add origin git@server-name:path/repo-name.git
關(guān)聯(lián)后帚屉,使用命令$ git push -u origin master第一次推送master分支的所有內(nèi)容
此后谜诫,每次本地提交后,只要有必要攻旦,就可以使用命令$ git push origin master推送最新修改
2.先有遠(yuǎn)程倉(cāng)庫(kù)喻旷,關(guān)聯(lián)本地倉(cāng)庫(kù)
$ git clone git@server-name:path/repo-name.git
===============================遠(yuǎn)程倉(cāng)庫(kù)_end===============================
===============================多人合作_start===============================
多人協(xié)作
查看遠(yuǎn)程庫(kù)的信息
git remote
git remote -v
#顯示更詳細(xì)的信息
流程
1.先pull到本地
2.合并,如果合并有沖突牢屋,則解決沖突且预,并在本地提交commit
3.后push到服務(wù)器
注意:如果git pull提示“no tracking information”,則說(shuō)明本地分支和遠(yuǎn)程分支的鏈接關(guān)系沒(méi)有創(chuàng)建烙无,用命令git branch --set-upstream branch-name origin/branch-name
===============================多人合作_end===============================
===============================stash_start===============================
stash
前提:必須是處于git下的文件锋谐,未add到git的文件無(wú)法使用
保存當(dāng)前工作進(jìn)度,將工作區(qū)和暫存區(qū)恢復(fù)到修改之前截酷。
git stash
作用同上涮拗,message為此次進(jìn)度保存的說(shuō)明。
git stash save message
顯示保存的工作進(jìn)度列表迂苛,編號(hào)越小代表保存進(jìn)度的時(shí)間越近三热。
git stash list
顯示做了哪些改動(dòng),默認(rèn)show第一個(gè)存儲(chǔ),如果要顯示其他存貯三幻,后面加stash@{$num}康铭,比如第二個(gè) git stash show stash@{1}。
git stash show
恢復(fù)工作進(jìn)度到工作區(qū)(不會(huì)刪點(diǎn)原來(lái)的stash@{num})赌髓,此命令的stash@{num}是可選項(xiàng)从藤,在多個(gè)工作進(jìn)度中可以選擇恢復(fù),不帶此項(xiàng)則默認(rèn)恢復(fù)最近的一次進(jìn)度
git stash apply stash@{num}
恢復(fù)工作進(jìn)度到工作區(qū)(會(huì)刪點(diǎn)原來(lái)的stash@{num})锁蠕,此命令的stash@{num}是可選項(xiàng)夷野,在多個(gè)工作進(jìn)度中可以選擇恢復(fù),不帶此項(xiàng)則默認(rèn)恢復(fù)最近的一次進(jìn)度
git stash pop stash@{num}
刪除一條保存的工作進(jìn)度荣倾,此命令的stash@{num}是可選項(xiàng)悯搔,在多個(gè)工作進(jìn)度中可以選擇刪除,不帶此項(xiàng)則默認(rèn)刪除最近的一次進(jìn)度相當(dāng)于git stash drop stash@{0}
git stash drop stash@{num}
刪除所有緩存的stash
git stash clear
從最新的stash創(chuàng)建分支舌仍。
場(chǎng)景:當(dāng)儲(chǔ)藏了部分工作妒貌,暫時(shí)不去理會(huì)通危,繼續(xù)在當(dāng)前分支進(jìn)行開(kāi)發(fā),后續(xù)想將stash中的內(nèi)容恢復(fù)到當(dāng)前工作目錄時(shí)灌曙,如果是針對(duì)同一個(gè)文件的修改(即便不是同行數(shù)據(jù))菊碟,那么可能會(huì)發(fā)生沖突,恢復(fù)失敗在刺,這里通過(guò)創(chuàng)建新的分支來(lái)解決逆害。可以用于解決stash中的內(nèi)容和當(dāng)前目錄的內(nèi)容發(fā)生沖突的情景蚣驼。
命令:git stash branch
刪除所有保存的工作進(jìn)度魄幕。
===============================stash_end===============================
===============================回滾_start===============================
【本地回滾】
- 未執(zhí)行g(shù)it add
git checkout file`#file是要恢復(fù)的文件名。注意:這是恢復(fù)到未修改前
- 已經(jīng)執(zhí)行g(shù)it add
git reset HEAD file
#file是要恢復(fù)的文件名颖杏。注意:這是恢復(fù)到未add前
- 已經(jīng)commit
git reset HEAD^ file
#file是要恢復(fù)的文件名纯陨。注意:這是恢復(fù)到未add前
- 全部回退,已commit
git reset --hard HEAD^
#退回上個(gè)版本git reset --hard HEAD^^
#退上上一版本git reset --hard HEAD~20
#退前第20個(gè)版本
【遠(yuǎn)程回滾】:
這個(gè)是重點(diǎn)要說(shuō)的內(nèi)容留储,過(guò)程比本地回滾要復(fù)雜
原理:先將本地分支退回到某個(gè)commit翼抠,刪除遠(yuǎn)程分支,再重新push本地分支提示:最好先把遠(yuǎn)程分支先備份再刪除欲鹏,重新push沒(méi)問(wèn)題后再刪除
===============================恢復(fù)文件_end===============================
===============================標(biāo)簽_start===============================
1机久、已打的標(biāo)簽列表:git tag
;如:git tag v1.0.1
2、給當(dāng)前分支打上一個(gè)標(biāo)簽:git tag 標(biāo)簽名
赔嚎;如:git tag v1.0.1
3膘盖、默認(rèn)是在本地打上標(biāo)簽,而并不會(huì)推送到遠(yuǎn)程尤误,所以需要推送到遠(yuǎn)程:git push origin 標(biāo)簽名
侠畔;如:git push origin v1.0.1
4、Git中不能真的檢出一個(gè)標(biāo)簽损晤,因?yàn)樗麄儾⒉荒芟穹种б粯觼?lái)回移動(dòng)软棺。如果想要工作目錄與倉(cāng)庫(kù)中特定地標(biāo)簽版本完全一致,可以使用git checkout -b [新分支名] [標(biāo)簽名]
在特定地標(biāo)簽上創(chuàng)建一個(gè)新分支尤勋。如:git checkout -b version1 v1.0.0
5喘落、刪除本地標(biāo)簽git tag -d [標(biāo)簽名]
6、刪除遠(yuǎn)程標(biāo)簽git push origin :refs/tags/[標(biāo)簽名]
注意:當(dāng)標(biāo)簽名和某個(gè)分支相同最冰,則推送到遠(yuǎn)程時(shí)會(huì)報(bào)錯(cuò)瘦棋。
git push origin 標(biāo)簽名
;報(bào)錯(cuò)信息:error: src refspec dev matches more than one
暖哨;解決辦法就是刪除標(biāo)簽赌朋,重新起另外的標(biāo)簽名,git tag -d [標(biāo)簽名]
===============================標(biāo)簽_end================================
刪除本地有但在遠(yuǎn)程庫(kù)已經(jīng)不存在的分支
git remote prune origin