柚子快報(bào)邀請(qǐng)碼778899分享:git 常用操作指令
柚子快報(bào)邀請(qǐng)碼778899分享:git 常用操作指令
文章目錄
git clonegit taggit configgit addgit commitgit stashgit rmgit branch/checkoutgit pull/pushgit rebash/merge多人維護(hù)同一分支解決沖突安全方法
git clone
git clone?可以將一個(gè)遠(yuǎn)程 Git 倉庫拷貝到本地,讓自己能夠查看該項(xiàng)目,或者進(jìn)行修改。
拷貝項(xiàng)目命令格式如下:
git clone [url]
[url]?是你要拷貝的項(xiàng)目。
例如我們拷貝 Github 上的項(xiàng)目:
$ git clone https://github.com/tianqixin/runoob-git-test
Cloning into 'runoob-git-test'...
remote: Enumerating objects: 12, done.
remote: Total 12 (delta 0), reused 0 (delta 0), pack-reused 12
Unpacking objects: 100% (12/12), done.
git tag
Git 支持兩種標(biāo)簽:
輕量標(biāo)簽(lightweight)附注標(biāo)簽(annotated)
輕量標(biāo)簽(lightweight)
輕量標(biāo)簽本質(zhì)上是將提交校驗(yàn)和存儲(chǔ)到一個(gè)文件中——沒有保存任何其他信息。 創(chuàng)建輕量標(biāo)簽,不需要使用 -a、-s 或 -m 選項(xiàng),只需要提供標(biāo)簽名字:
$ git tag
$ git tag
附注標(biāo)簽(annotated)
創(chuàng)建附注標(biāo)簽,在git tag指定-a
git tag -a
//創(chuàng)建帶有注釋的標(biāo)簽:
$ git tag -a v1.4 -m "my version 1.4"
//列出所有標(biāo)簽:
$ git tag
通過使用 git show 命令可以看到標(biāo)簽信息和與之對(duì)應(yīng)的提交信息:
共享標(biāo)簽
默認(rèn)情況下,git push?命令并不會(huì)傳送標(biāo)簽到遠(yuǎn)程倉庫服務(wù)器上。 在創(chuàng)建完標(biāo)簽后我們必須顯式地推送標(biāo)簽到共享服務(wù)器上。 這個(gè)過程就像共享遠(yuǎn)程分支一樣——你可以運(yùn)行?git push origin
$ git push origin
使用--tags選項(xiàng)可以將所有不在遠(yuǎn)程倉庫服務(wù)器上的標(biāo)簽一次性傳送到那里。
$ git push origin --tags
注意:?使用?git push
刪掉標(biāo)簽
要?jiǎng)h除掉本地倉庫上的標(biāo)簽,可以使用命令?git tag -d
$ git tag -d
刪除遠(yuǎn)端標(biāo)簽:
git push origin --delete
檢出標(biāo)簽
如果想查看某個(gè)標(biāo)簽所指向的文件版本,可以使用?git checkout?命令, 雖然這會(huì)使我們的倉庫處于“分離頭指針(detached HEAD)”的狀態(tài)——但是這個(gè)狀態(tài)有些副作用:
$ git checkout
?git config
我們可以通過git config來配置用戶名和郵箱地址,便于我們將代碼提交到遠(yuǎn)程倉庫,具體格式如下:
git config --global user.name '你的用戶名'
git config --global user.email '你的郵箱'
git add
git add 命令可將文件添加到緩存,如新項(xiàng)目中,添加所有文件很普遍,可以使用如下命令:
git add .
注意:add有多種形式,可以add某個(gè)文件,某個(gè)文件夾,或直接add當(dāng)前倉庫下所有文件
git add 單個(gè)文件
git add 文件夾1/ 文件夾2/ ……多個(gè)文件夾之間空格隔開
git add .
有時(shí)候我們add之后又改了代碼,所以想重新add,但是之前add但是沒有commit的文件還在,想撤銷怎么辦呢?
git status //查看已經(jīng)add的
git reset . //撤銷命令reset,此處表示撤銷全部
git reset HEAD 命令用于取消已緩存的內(nèi)容,如我們要取消已提交的test.txt文件,可以如下使用:(撤銷單個(gè)文件)
git reset HEAD test.txt
git commit
git commit 將緩存區(qū)內(nèi)容添加到倉庫中,可以在后面加-m選項(xiàng),以在命令行中提供提交注釋,格式如下:
git commit -m "第一次版本提交" //文件從暫存區(qū)提交到版本庫,其中" "內(nèi)是對(duì)應(yīng)提交的注釋
如果你覺得 每次 commit之前要add一下,想跳過add這一步,可以直接使用 -a選項(xiàng),如:
git commit -am "第一次版本提交"
我們可以創(chuàng)建一個(gè)文件,并將它添加打緩存,之后在提交,具體操作如下:
git stash
git stash ///暫存"工作現(xiàn)場"
git stash list //查看保存的工作現(xiàn)場
git stash apply // 恢復(fù)工作現(xiàn)場,但是stash內(nèi)容不刪除,刪除需要 git stash pop
git stash pop //恢復(fù)工作現(xiàn)場的同時(shí)刪除stash內(nèi)容
常用git stash命令:
(1)git stash save "save message" : 執(zhí)行存儲(chǔ)時(shí),添加備注,方便查找,只有g(shù)it stash 也要可以的,但查找時(shí)不方便識(shí)別。
(2)git stash list :查看stash了哪些存儲(chǔ)
(3)git stash show :顯示做了哪些改動(dòng),默認(rèn)show第一個(gè)存儲(chǔ),如果要顯示其他存貯,后面加stash@{$num},比如第二個(gè) git stash show stash@{1}
(4)git stash show -p : 顯示第一個(gè)存儲(chǔ)的改動(dòng),如果想顯示其他存存儲(chǔ),命令:git stash show stash@{$num} -p ,比如第二個(gè):git stash show stash@{1} -p
(5)git stash apply :應(yīng)用某個(gè)存儲(chǔ),但不會(huì)把存儲(chǔ)從存儲(chǔ)列表中刪除,默認(rèn)使用第一個(gè)存儲(chǔ),即stash@{0},如果要使用其他個(gè),git stash apply stash@{$num} , 比如第二個(gè):git stash apply stash@{1}
(6)git stash pop :命令恢復(fù)之前緩存的工作目錄,將緩存堆棧中的對(duì)應(yīng)stash刪除,并將對(duì)應(yīng)修改應(yīng)用到當(dāng)前的工作目錄下,默認(rèn)為第一個(gè)stash,即stash@{0},如果要應(yīng)用并刪除其他stash,命令:git stash pop stash@{$num} ,比如應(yīng)用并刪除第二個(gè):git stash pop stash@{1}
(7)git stash drop stash@{$num} :丟棄stash@{$num}存儲(chǔ),從列表中刪除這個(gè)存儲(chǔ)
(8)git stash clear :刪除所有緩存的stash
總結(jié):
如果要應(yīng)用這些stash,直接使用git stash apply或者git stash pop就可以再次導(dǎo)出來了。
git add 只是把文件加到git 版本控制里,并不等于就被stash起來了,git add和git stash 沒有必然的關(guān)系,但是執(zhí)行g(shù)it stash 能正確存儲(chǔ)的前提是文件必須在git 版本控制中才行。
常規(guī) git stash 的一個(gè)限制是它會(huì)一下暫存所有的文件。有時(shí),只備份某些文件更為方便,讓另外一些與代碼庫保持一致。一個(gè)非常有用的技巧,用來備份部分文件:
add 那些你不想備份的文件(例如: git add file1.js, file2.js)調(diào)用 git stash –keep-index。只會(huì)備份那些沒有被add的文件。調(diào)用 git reset 取消已經(jīng)add的文件的備份,繼續(xù)自己的工作。
git rm
如果只是簡單地從工作目錄中手工刪除文件,運(yùn)行 git status 時(shí)就會(huì)在 Changes not staged for commit 的提示。要從 Git 中移除某個(gè)文件,就必須要從已跟蹤文件清單中移除,然后提交。可以如下使用:
git rm
如果刪除之前修改過并且已經(jīng)放到暫存區(qū)域的話,則必須要用強(qiáng)制刪除選項(xiàng) -f
git rm -f
可以遞歸刪除,即如果后面跟的是一個(gè)目錄做為參數(shù),則會(huì)遞歸刪除整個(gè)目錄中的所有子目錄和文件:
git rm –r *
rm -rf .git/ //強(qiáng)制刪除暫存文件
git branch/checkout
git branch:查看分支命令git branch (branchname):創(chuàng)建分支命令git checkout (branchname):切換分支命令git merge:合并分支命令git branch -d (branchname):刪除分支命令
git branch ? ? ? ? ? ? ? ? ? ? ? ? ? #查看分支 git branch -a ? ? ? ? ? ? ? ? ? ? ? ?#查看所有分支,包括遠(yuǎn)程和本地 git branch name ? ? ? ? ? ? ? ? ? ? ?#創(chuàng)建分支 git checkout name ? ? ? ? ? ? ? ? ? ?#切換分支到name git checkout -b name ? ? ? ? ? ? ? ? #創(chuàng)建一個(gè)新的分支并且立即切換到它 git merge name ? ? ? ? ? ? ? ? ? ? ? #在分支master上合并分支name git branch -d name ? ? ? ? ? ? ? ? ? #刪除本地分支name git push origin --delete name ? ? ? ?#刪除遠(yuǎn)程分支 ? ?
git pull/push
git fetch和git pull的區(qū)別:
git fetch:相當(dāng)于是從遠(yuǎn)程獲取最新版本到本地,不會(huì)自動(dòng)合并。 git pull:相當(dāng)于是從遠(yuǎn)程獲取最新版本并merge到本地。 git push git push 推送你的新分支與數(shù)據(jù)到某個(gè)遠(yuǎn)端倉庫命令,格式如下:
更新操作:
$ git pull
$ git pull origin
將遠(yuǎn)程主機(jī) origin 的 master 分支拉取過來,與本地的 brantest 分支合并。
git pull origin master:brantest
如果遠(yuǎn)程分支是與當(dāng)前分支合并,則冒號(hào)后面的部分可以省略。
git pull origin master
git push 命令用于從將本地的分支版本上傳到遠(yuǎn)程并合并。
命令格式如下:
git push <遠(yuǎn)程主機(jī)名> <本地分支名>:<遠(yuǎn)程分支名>
如果本地分支名與遠(yuǎn)程分支名相同,則可以省略冒號(hào):
git push <遠(yuǎn)程主機(jī)名> <本地分支名>
以下命令將本地的 master 分支推送到 origin 主機(jī)的 master 分支。
$ git push origin master //等價(jià)于$ git push origin master:master
或git push -u origin master
如果origin端還不存在本地分支dev,想將本地分支推送到遠(yuǎn)端可以使用
git push --set-upstream origin dev
刪除主機(jī)的分支可以使用 --delete 參數(shù),以下命令表示刪除 origin 主機(jī)的 master 分支:
git push origin --delete master
git rebash/merge
在開發(fā)中經(jīng)常需要基于一個(gè)分支來創(chuàng)建子分支,然后在子分支上進(jìn)行開發(fā),最后驗(yàn)證功能無問題才會(huì)將子分支合并到主分支上去。將子分支合并到主分支上一般有兩種方案,分別為:
git merge:這種合并會(huì)在對(duì)應(yīng)的主分支上產(chǎn)生合并的提交,以及對(duì)應(yīng)子分支的提交情況。git rebase:這種合并是變基的操作,相當(dāng)于將子分支的 commit 直接提交到主分支上,此時(shí)主分支上不會(huì)有合并記錄和對(duì)應(yīng)子分支的提交情況,看起來比較清爽。
現(xiàn)將子分支?dev?的代碼以git rebase的方式合并到主分支?main上且不要留下合并的記錄,此時(shí)相當(dāng)于將子分支的所有?commit?提交到當(dāng)前的主分支上。如下:B?,?C為主分支上的提交,D,?E?為子分支的提交,現(xiàn)在要將子分支的兩筆?commit?合并到主分支上。
?初始時(shí)狀態(tài):
對(duì)子分支?dev?進(jìn)行g(shù)it rebase?之后,子分支的 commit 就被合并到主分支上,此時(shí)主分支的提交記錄如下圖所示:
git rebase?流程
# 1. 切換到主分支 main 上,其它分支的代碼將被合并到該分支上
git checkout main
# 2. 變基操作,對(duì)子分支 dev 進(jìn)行變基操作,相當(dāng)于將其所有的 commit 都提交到主分支(當(dāng)前所在的分支)上去
git rebase dev
# 3. 變基操作成功后,此時(shí)主分支上的代碼選喲推送到遠(yuǎn)程代碼倉中
git push
【注意事項(xiàng)】
git rebase?的分支是基于目標(biāo)分支進(jìn)行創(chuàng)建的。git rebase?可能會(huì)遇到?jīng)_突需要解決
但是如果是多個(gè)人在維護(hù)主分支main時(shí),自己維護(hù)分支dev1,如果自己分支超前main分支,r如果想將dev1分支修改的內(nèi)容合并到main分支
則最好先同步一下main分支,即將dev1變基onto main
操作:
git checkout dev1
git rebash main
git push
此時(shí)dev1和main分支同基
然后將dev1修改合并到main分支
操作:
git checkout main
git merge dev1
git push
多人維護(hù)同一分支解決沖突安全方法
案例:A和B同時(shí)在一個(gè)分支開發(fā)
A:先于B提交
B想同步A的提交并解決與自己修改的沖突
1、先創(chuàng)建臨時(shí)分支 git checkout -b dev-a
2、提交到本地,無需傳到遠(yuǎn)端 git add . git commit
3、然后切換到原始分支,相當(dāng)于原始分支未改動(dòng) git checkout dev-test
4、在本地dev-test分支拉取遠(yuǎn)端修改,此時(shí)本地dev-test與遠(yuǎn)端dev-test已經(jīng)同步 git pull
5、切換到臨時(shí)創(chuàng)建的分支 git checkout dev_a
6、進(jìn)行變基操作,讓臨時(shí)分支與dev-test分支同步,同時(shí)需要解決沖突 git rebase dev-test
7、將臨時(shí)分支合并到開發(fā)分支dev-test,并刪除臨時(shí)分支
git checkout dev-test
git merge dev_a
git branch -d dev_a
常見的操作命令:
參考:
Git 常用基本命令使用詳細(xì)大全_git命令行-CSDN博客
git常用命令總結(jié)_git_一頭小驢-GitCode 開源社區(qū) (csdn.net)
https://www.cnblogs.com/Jeffxu/p/17968795
Git教程學(xué)習(xí):07 打標(biāo)簽_git 打標(biāo)簽-CSDN博客
柚子快報(bào)邀請(qǐng)碼778899分享:git 常用操作指令
好文推薦
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。