git常用命令

1719457313253.jpg

設(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

  1. 新建一個(gè)目錄a渐夸,然后執(zhí)行g(shù)it init,然后再執(zhí)行pwd,復(fù)制路徑url
  2. 新建另一個(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)
  3. 若b的目錄需要push,則a目錄的分支不能停在master,不然push不上去桃纯,需要切換到另外的分支酷誓。

===============================常用操作_end===============================


===============================遠(yuǎn)程倉(cāng)庫(kù)_start===============================

遠(yuǎn)程倉(cāng)庫(kù)

注:

  1. 本地和遠(yuǎn)程第一次操作時(shí)需要關(guān)連:加上-u參數(shù)披坏。
  2. 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
  3. 切換關(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。
  • 序言:七十年代末沛慢,一起剝皮案震驚了整個(gè)濱河市赡若,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌团甲,老刑警劉巖逾冬,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異伐庭,居然都是意外死亡粉渠,警方通過(guò)查閱死者的電腦和手機(jī)分冈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)圾另,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人雕沉,你說(shuō)我怎么就攤上這事集乔。” “怎么了坡椒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵扰路,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我倔叼,道長(zhǎng)汗唱,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任丈攒,我火速辦了婚禮哩罪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘巡验。我一直安慰自己际插,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布显设。 她就那樣靜靜地躺著框弛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捕捂。 梳的紋絲不亂的頭發(fā)上瑟枫,一...
    開(kāi)封第一講書(shū)人閱讀 51,610評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音指攒,去河邊找鬼慷妙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛幽七,可吹牛的內(nèi)容都是我干的景殷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼猿挚!你這毒婦竟也來(lái)了咐旧?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤绩蜻,失蹤者是張志新(化名)和其女友劉穎铣墨,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體办绝,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伊约,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了孕蝉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屡律。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖降淮,靈堂內(nèi)的尸體忽然破棺而出超埋,到底是詐尸還是另有隱情,我是刑警寧澤佳鳖,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布霍殴,位于F島的核電站,受9級(jí)特大地震影響系吩,放射性物質(zhì)發(fā)生泄漏来庭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一穿挨、第九天 我趴在偏房一處隱蔽的房頂上張望月弛。 院中可真熱鬧,春花似錦絮蒿、人聲如沸尊搬。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)佛寿。三九已至,卻和暖如春但壮,著一層夾襖步出監(jiān)牢的瞬間冀泻,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工蜡饵, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弹渔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓溯祸,卻偏偏與公主長(zhǎng)得像肢专,于是被迫代替她去往敵國(guó)和親舞肆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355

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