国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 開發(fā)工具 git Git常用命令總結(jié)

Git常用命令總結(jié)

Jun 06, 2019 pm 04:04 PM
git命令

Git常用命令總結(jié)

git常用命令有:

git init

? ? ?在本地新建一個(gè)repo,進(jìn)入一個(gè)項(xiàng)目目錄,執(zhí)行g(shù)it init,會(huì)初始化一個(gè)repo,并在當(dāng)前文件夾下創(chuàng)建一個(gè).git文件夾.

?

git clone

? ? ?獲取一個(gè)url對應(yīng)的遠(yuǎn)程Git repo, 創(chuàng)建一個(gè)local copy.

? ? ?一般的格式是git clone [url].

?????clone下來的repo會(huì)以url最后一個(gè)斜線后面的名稱命名,創(chuàng)建一個(gè)文件夾,如果想要指定特定的名稱,可以git clone [url] newname指定.

?

git status

? ? ?查詢r(jià)epo的狀態(tài).

? ? ?git status -s: -s表示short, -s的輸出標(biāo)記會(huì)有兩列,第一列是對staging區(qū)域而言,第二列是對working目錄而言.

?

git log

? ? ?show commit history of a branch.

? ? ?git log --oneline --number: 每條log只顯示一行,顯示number條.

? ? ?git log --oneline --graph:可以圖形化地表示出分支合并歷史.

? ? ?git log branchname可以顯示特定分支的log.

? ? ?git log --oneline branch1 ^branch2,可以查看在分支1,卻不在分支2中的提交.^表示排除這個(gè)分支(Window下可能要給^branch2加上引號(hào)).

? ? ?git log --decorate會(huì)顯示出tag信息.

? ? ?git log --author=[author name] 可以指定作者的提交歷史.

? ? ?git log --since --before --until --after 根據(jù)提交時(shí)間篩選log.

? ? ?--no-merges可以將merge的commits排除在外.

? ? ?git log --grep 根據(jù)commit信息過濾log: git log --grep=keywords

? ? ?默認(rèn)情況下, git log --grep --author是OR的關(guān)系,即滿足一條即被返回,如果你想讓它們是AND的關(guān)系,可以加上--all-match的option.

? ? ?git log -S: filter by introduced diff.

? ? ?比如: git log -SmethodName (注意S和后面的詞之間沒有等號(hào)分隔).

? ? ?git log -p: show patch introduced at each commit.

? ? ?每一個(gè)提交都是一個(gè)快照(snapshot),Git會(huì)把每次提交的diff計(jì)算出來,作為一個(gè)patch顯示給你看.

? ? ?另一種方法是git show [SHA].

? ? ?git log --stat: show diffstat of changes introduced at each commit.

? ? ?同樣是用來看改動(dòng)的相對信息的,--stat比-p的輸出更簡單一些.

? ??

git add

? ? ?在提交之前,Git有一個(gè)暫存區(qū)(staging area),可以放入新添加的文件或者加入新的改動(dòng). commit時(shí)提交的改動(dòng)是上一次加入到staging area中的改動(dòng),而不是我們disk上的改動(dòng).

? ? ?git add?.

? ? ?會(huì)遞歸地添加當(dāng)前工作目錄中的所有文件.

?

git diff

? ? ?不加參數(shù)的git diff:

? ? ?show diff of unstaged changes.

?????此命令比較的是工作目錄中當(dāng)前文件和暫存區(qū)域快照之間的差異,也就是修改之后還沒有暫存起來的變化內(nèi)容.

?

?????若要看已經(jīng)暫存起來的文件和上次提交時(shí)的快照之間的差異,可以用:

?????git diff --cached 命令.

? ? ?show diff of staged changes.

?????(Git 1.6.1 及更高版本還允許使用 git diff --staged,效果是相同的).

?

? ? ?git diff HEAD

? ? ?show diff of all staged or unstated changes.

? ? ?也即比較woking directory和上次提交之間所有的改動(dòng).

?

? ? ?如果想看自從某個(gè)版本之后都改動(dòng)了什么,可以用:

? ? ?git diff [version tag]

? ? ?跟log命令一樣,diff也可以加上--stat參數(shù)來簡化輸出.

?

? ? ?git diff [branchA] [branchB]可以用來比較兩個(gè)分支.

?????它實(shí)際上會(huì)返回一個(gè)由A到B的patch,不是我們想要的結(jié)果.

?????一般我們想要的結(jié)果是兩個(gè)分支分開以后各自的改動(dòng)都是什么,是由命令:

? ? ?git diff [branchA]…[branchB]給出的.

? ? ?實(shí)際上它是:git diff $(git merge-base [branchA] [branchB]) [branchB]的結(jié)果.

?

?

git commit

? ? ?提交已經(jīng)被add進(jìn)來的改動(dòng).

? ? ?git commit -m “the commit message"

? ? ?git commit -a 會(huì)先把所有已經(jīng)track的文件的改動(dòng)add進(jìn)來,然后提交(有點(diǎn)像svn的一次提交,不用先暫存). 對于沒有track的文件,還是需要git add一下.

? ? ?git commit --amend 增補(bǔ)提交. 會(huì)使用與當(dāng)前提交節(jié)點(diǎn)相同的父節(jié)點(diǎn)進(jìn)行一次新的提交,舊的提交將會(huì)被取消.

?

git reset

? ? ?undo changes and commits.

? ? ?這里的HEAD關(guān)鍵字指的是當(dāng)前分支最末梢最新的一個(gè)提交.也就是版本庫中該分支上的最新版本.

? ? ?git reset HEAD: unstage files from index and reset pointer to HEAD

? ? ?這個(gè)命令用來把不小心add進(jìn)去的文件從staged狀態(tài)取出來,可以單獨(dú)針對某一個(gè)文件操作: git reset HEAD - - filename, 這個(gè)- - 也可以不加.

? ? ?git reset --soft

? ? ?move HEAD to specific commit reference, index and staging are untouched.

? ? ?git reset --hard

? ? ?unstage files AND undo any changes in the working directory since last commit.

? ? ?使用git reset —hard HEAD進(jìn)行reset,即上次提交之后,所有staged的改動(dòng)和工作目錄的改動(dòng)都會(huì)消失,還原到上次提交的狀態(tài).

? ? ?這里的HEAD可以被寫成任何一次提交的SHA-1.

? ? ?不帶soft和hard參數(shù)的git reset,實(shí)際上帶的是默認(rèn)參數(shù)mixed.

?

? ? ?總結(jié):

? ? ?git reset --mixed id,是將git的HEAD變了(也就是提交記錄變了),但文件并沒有改變,(也就是working tree并沒有改變). 取消了commit和add的內(nèi)容.

?????git reset --soft id. 實(shí)際上,是git reset –mixed id 后,又做了一次git add.即取消了commit的內(nèi)容.

?????git reset --hard id.是將git的HEAD變了,文件也變了.

? ? ?按改動(dòng)范圍排序如下:

? ? ?soft (commit) < mixed (commit + add) < hard (commit + add + local working)

git revert

反轉(zhuǎn)撤銷提交.只要把出錯(cuò)的提交(commit)的名字(reference)作為參數(shù)傳給命令就可以了.

git revert HEAD: 撤銷最近的一個(gè)提交.

git revert會(huì)創(chuàng)建一個(gè)反向的新提交,可以通過參數(shù)-n來告訴Git先不要提交.

git rm

git rm file: 從staging區(qū)移除文件,同時(shí)也移除出工作目錄.

git rm --cached: 從staging區(qū)移除文件,但留在工作目錄中.

git rm --cached從功能上等同于git reset HEAD,清除了緩存區(qū),但不動(dòng)工作目錄樹.

git clean

git clean是從工作目錄中移除沒有track的文件.

通常的參數(shù)是git clean -df:

-d表示同時(shí)移除目錄,-f表示force,因?yàn)樵趃it的配置文件中, clean.requireForce=true,如果不加-f,clean將會(huì)拒絕執(zhí)行.

git mv

git rm - - cached orig; mv orig new; git add new

git stash

把當(dāng)前的改動(dòng)壓入一個(gè)棧.

git stash將會(huì)把當(dāng)前目錄和index中的所有改動(dòng)(但不包括未track的文件)壓入一個(gè)棧,然后留給你一個(gè)clean的工作狀態(tài),即處于上一次最新提交處.

git stash list會(huì)顯示這個(gè)棧的list.

git stash apply:取出stash中的上一個(gè)項(xiàng)目(stash@{0}),并且應(yīng)用于當(dāng)前的工作目錄.

也可以指定別的項(xiàng)目,比如git stash apply stash@{1}.

如果你在應(yīng)用stash中項(xiàng)目的同時(shí)想要?jiǎng)h除它,可以用git stash pop

刪除stash中的項(xiàng)目:

git stash drop: 刪除上一個(gè),也可指定參數(shù)刪除指定的一個(gè)項(xiàng)目.

git stash clear: 刪除所有項(xiàng)目.

git branch

git branch可以用來列出分支,創(chuàng)建分支和刪除分支.

git branch -v可以看見每一個(gè)分支的最后一次提交.

git branch: 列出本地所有分支,當(dāng)前分支會(huì)被星號(hào)標(biāo)示出.

git branch (branchname): 創(chuàng)建一個(gè)新的分支(當(dāng)你用這種方式創(chuàng)建分支的時(shí)候,分支是基于你的上一次提交建立的).

git branch -d (branchname): 刪除一個(gè)分支.

刪除remote的分支:

git push (remote-name) :(branch-name): delete a remote branch.

這個(gè)是因?yàn)橥暾拿钚问绞?

git push remote-name local-branch:remote-branch

而這里local-branch的部分為空,就意味著刪除了remote-branch

git checkout

  git checkout (branchname)

切換到一個(gè)分支.

git checkout -b (branchname): 創(chuàng)建并切換到新的分支.

這個(gè)命令是將git branch newbranch和git checkout newbranch合在一起的結(jié)果.

checkout還有另一個(gè)作用:替換本地改動(dòng):

git checkout --

? ? ?此命令會(huì)使用HEAD中的最新內(nèi)容替換掉你的工作目錄中的文件.已添加到暫存區(qū)的改動(dòng)以及新文件都不會(huì)受到影響.

? ? ?注意:git checkout filename會(huì)刪除該文件中所有沒有暫存和提交的改動(dòng),這個(gè)操作是不可逆的.

?

git merge

? ? ?把一個(gè)分支merge進(jìn)當(dāng)前的分支.

? ? ?git merge [alias]/[branch]

? ? ?把遠(yuǎn)程分支merge到當(dāng)前分支.

?

? ? ?如果出現(xiàn)沖突,需要手動(dòng)修改,可以用git mergetool.

? ? ?解決沖突的時(shí)候可以用到git diff,解決完之后用git add添加,即表示沖突已經(jīng)被resolved.

?

git tag

? ? ?tag a point in history as import.

? ? ?會(huì)在一個(gè)提交上建立永久性的書簽,通常是發(fā)布一個(gè)release版本或者ship了什么東西之后加tag.

? ? ?比如: git tag v1.0

? ? ?git tag -a v1.0, -a參數(shù)會(huì)允許你添加一些信息,即make an annotated tag.

? ? ?當(dāng)你運(yùn)行g(shù)it tag -a命令的時(shí)候,Git會(huì)打開一個(gè)編輯器讓你輸入tag信息.

? ? ?

? ? ?我們可以利用commit SHA來給一個(gè)過去的提交打tag:

? ? ?git tag -a v0.9 XXXX

?

? ? ?push的時(shí)候是不包含tag的,如果想包含,可以在push時(shí)加上--tags參數(shù).

? ? ?fetch的時(shí)候,branch HEAD可以reach的tags是自動(dòng)被fetch下來的, tags that aren’t reachable from branch heads will be skipped.如果想確保所有的tags都被包含進(jìn)來,需要加上--tags選項(xiàng).

?

git remote

? ? ?list, add and delete remote repository aliases.

? ? ?因?yàn)椴恍枰看味加猛暾膗rl,所以Git為每一個(gè)remote repo的url都建立一個(gè)別名,然后用git remote來管理這個(gè)list.

? ? ?git remote: 列出remote aliases.

? ? ?如果你clone一個(gè)project,Git會(huì)自動(dòng)將原來的url添加進(jìn)來,別名就叫做:origin.

? ? ?git remote -v:可以看見每一個(gè)別名對應(yīng)的實(shí)際url.

? ? ?git remote add [alias] [url]: 添加一個(gè)新的remote repo.

? ? ?git remote rm [alias]: 刪除一個(gè)存在的remote alias.

? ? ?git remote rename [old-alias] [new-alias]: 重命名.

? ? ?git remote set-url [alias] [url]:更新url. 可以加上—push和fetch參數(shù),為同一個(gè)別名set不同的存取地址.

?

git fetch

? ? ?download new branches and data from a remote repository.

? ? ?可以git fetch [alias]取某一個(gè)遠(yuǎn)程repo,也可以git fetch --all取到全部repo

? ? ?fetch將會(huì)取到所有你本地沒有的數(shù)據(jù),所有取下來的分支可以被叫做remote branches,它們和本地分支一樣(可以看diff,log等,也可以merge到其他分支),但是Git不允許你checkout到它們.?

?

git pull

? ? ?fetch from a remote repo and try to merge into the current branch.

? ? ?pull == fetch + merge FETCH_HEAD

? ? ?git pull會(huì)首先執(zhí)行g(shù)it fetch,然后執(zhí)行g(shù)it merge,把取來的分支的head merge到當(dāng)前分支.這個(gè)merge操作會(huì)產(chǎn)生一個(gè)新的commit.? ??

?????如果使用--rebase參數(shù),它會(huì)執(zhí)行g(shù)it rebase來取代原來的git merge.

??

?

git rebase

?????--rebase不會(huì)產(chǎn)生合并的提交,它會(huì)將本地的所有提交臨時(shí)保存為補(bǔ)丁(patch),放在”.git/rebase”目錄中,然后將當(dāng)前分支更新到最新的分支尖端,最后把保存的補(bǔ)丁應(yīng)用到分支上.

? ? ?rebase的過程中,也許會(huì)出現(xiàn)沖突,Git會(huì)停止rebase并讓你解決沖突,在解決完沖突之后,用git add去更新這些內(nèi)容,然后無需執(zhí)行commit,只需要:

? ? ?git rebase --continue就會(huì)繼續(xù)打余下的補(bǔ)丁.

? ? ?git rebase --abort將會(huì)終止rebase,當(dāng)前分支將會(huì)回到rebase之前的狀態(tài).

?

git push

? ? ?push your new branches and data to a remote repository.

? ? ?git push [alias] [branch]

? ? ?將會(huì)把當(dāng)前分支merge到alias上的[branch]分支.如果分支已經(jīng)存在,將會(huì)更新,如果不存在,將會(huì)添加這個(gè)分支.

? ? ?如果有多個(gè)人向同一個(gè)remote repo push代碼, Git會(huì)首先在你試圖push的分支上運(yùn)行g(shù)it log,檢查它的歷史中是否能看到server上的branch現(xiàn)在的tip,如果本地歷史中不能看到server的tip,說明本地的代碼不是最新的,Git會(huì)拒絕你的push,讓你先fetch,merge,之后再push,這樣就保證了所有人的改動(dòng)都會(huì)被考慮進(jìn)來.

?

git reflog

? ? ?git reflog是對reflog進(jìn)行管理的命令,reflog是git用來記錄引用變化的一種機(jī)制,比如記錄分支的變化或者是HEAD引用的變化.

? ? ?當(dāng)git reflog不指定引用的時(shí)候,默認(rèn)列出HEAD的reflog.

? ? ?HEAD@{0}代表HEAD當(dāng)前的值,HEAD@{3}代表HEAD在3次變化之前的值.

? ? ?git會(huì)將變化記錄到HEAD對應(yīng)的reflog文件中,其路徑為.git/logs/HEAD, 分支的reflog文件都放在.git/logs/refs目錄下的子目錄中.

?

?

特殊符號(hào):

?????^代表父提交,當(dāng)一個(gè)提交有多個(gè)父提交時(shí),可以通過在^后面跟上一個(gè)數(shù)字,表示第幾個(gè)父提交: ^相當(dāng)于^1.

?????~相當(dāng)于連續(xù)的個(gè)^.

git init

? ? ?在本地新建一個(gè)repo,進(jìn)入一個(gè)項(xiàng)目目錄,執(zhí)行g(shù)it init,會(huì)初始化一個(gè)repo,并在當(dāng)前文件夾下創(chuàng)建一個(gè).git文件夾.

?

git clone

? ? ?獲取一個(gè)url對應(yīng)的遠(yuǎn)程Git repo, 創(chuàng)建一個(gè)local copy.

? ? ?一般的格式是git clone [url].

?????clone下來的repo會(huì)以url最后一個(gè)斜線后面的名稱命名,創(chuàng)建一個(gè)文件夾,如果想要指定特定的名稱,可以git clone [url] newname指定.

?

git status

? ? ?查詢r(jià)epo的狀態(tài).

? ? ?git status -s: -s表示short, -s的輸出標(biāo)記會(huì)有兩列,第一列是對staging區(qū)域而言,第二列是對working目錄而言.

?

git log

? ? ?show commit history of a branch.

? ? ?git log --oneline --number: 每條log只顯示一行,顯示number條.

? ? ?git log --oneline --graph:可以圖形化地表示出分支合并歷史.

? ? ?git log branchname可以顯示特定分支的log.

? ? ?git log --oneline branch1 ^branch2,可以查看在分支1,卻不在分支2中的提交.^表示排除這個(gè)分支(Window下可能要給^branch2加上引號(hào)).

? ? ?git log --decorate會(huì)顯示出tag信息.

? ? ?git log --author=[author name] 可以指定作者的提交歷史.

? ? ?git log --since --before --until --after 根據(jù)提交時(shí)間篩選log.

? ? ?--no-merges可以將merge的commits排除在外.

? ? ?git log --grep 根據(jù)commit信息過濾log: git log --grep=keywords

? ? ?默認(rèn)情況下, git log --grep --author是OR的關(guān)系,即滿足一條即被返回,如果你想讓它們是AND的關(guān)系,可以加上--all-match的option.

? ? ?git log -S: filter by introduced diff.

? ? ?比如: git log -SmethodName (注意S和后面的詞之間沒有等號(hào)分隔).

? ? ?git log -p: show patch introduced at each commit.

? ? ?每一個(gè)提交都是一個(gè)快照(snapshot),Git會(huì)把每次提交的diff計(jì)算出來,作為一個(gè)patch顯示給你看.

? ? ?另一種方法是git show [SHA].

? ? ?git log --stat: show diffstat of changes introduced at each commit.

? ? ?同樣是用來看改動(dòng)的相對信息的,--stat比-p的輸出更簡單一些.

? ??

git add

? ? ?在提交之前,Git有一個(gè)暫存區(qū)(staging area),可以放入新添加的文件或者加入新的改動(dòng). commit時(shí)提交的改動(dòng)是上一次加入到staging area中的改動(dòng),而不是我們disk上的改動(dòng).

? ? ?git add?.

? ? ?會(huì)遞歸地添加當(dāng)前工作目錄中的所有文件.

?

git diff

? ? ?不加參數(shù)的git diff:

? ? ?show diff of unstaged changes.

?????此命令比較的是工作目錄中當(dāng)前文件和暫存區(qū)域快照之間的差異,也就是修改之后還沒有暫存起來的變化內(nèi)容.

?

?????若要看已經(jīng)暫存起來的文件和上次提交時(shí)的快照之間的差異,可以用:

?????git diff --cached 命令.

? ? ?show diff of staged changes.

?????(Git 1.6.1 及更高版本還允許使用 git diff --staged,效果是相同的).

?

? ? ?git diff HEAD

? ? ?show diff of all staged or unstated changes.

? ? ?也即比較woking directory和上次提交之間所有的改動(dòng).

?

? ? ?如果想看自從某個(gè)版本之后都改動(dòng)了什么,可以用:

? ? ?git diff [version tag]

? ? ?跟log命令一樣,diff也可以加上--stat參數(shù)來簡化輸出.

?

? ? ?git diff [branchA] [branchB]可以用來比較兩個(gè)分支.

?????它實(shí)際上會(huì)返回一個(gè)由A到B的patch,不是我們想要的結(jié)果.

?????一般我們想要的結(jié)果是兩個(gè)分支分開以后各自的改動(dòng)都是什么,是由命令:

? ? ?git diff [branchA]…[branchB]給出的.

? ? ?實(shí)際上它是:git diff $(git merge-base [branchA] [branchB]) [branchB]的結(jié)果.

?

?

git commit

? ? ?提交已經(jīng)被add進(jìn)來的改動(dòng).

? ? ?git commit -m “the commit message"

? ? ?git commit -a 會(huì)先把所有已經(jīng)track的文件的改動(dòng)add進(jìn)來,然后提交(有點(diǎn)像svn的一次提交,不用先暫存). 對于沒有track的文件,還是需要git add一下.

? ? ?git commit --amend 增補(bǔ)提交. 會(huì)使用與當(dāng)前提交節(jié)點(diǎn)相同的父節(jié)點(diǎn)進(jìn)行一次新的提交,舊的提交將會(huì)被取消.

?

git reset

? ? ?undo changes and commits.

? ? ?這里的HEAD關(guān)鍵字指的是當(dāng)前分支最末梢最新的一個(gè)提交.也就是版本庫中該分支上的最新版本.

? ? ?git reset HEAD: unstage files from index and reset pointer to HEAD

? ? ?這個(gè)命令用來把不小心add進(jìn)去的文件從staged狀態(tài)取出來,可以單獨(dú)針對某一個(gè)文件操作: git reset HEAD - - filename, 這個(gè)- - 也可以不加.

? ? ?git reset --soft

? ? ?move HEAD to specific commit reference, index and staging are untouched.

? ? ?git reset --hard

? ? ?unstage files AND undo any changes in the working directory since last commit.

? ? ?使用git reset —hard HEAD進(jìn)行reset,即上次提交之后,所有staged的改動(dòng)和工作目錄的改動(dòng)都會(huì)消失,還原到上次提交的狀態(tài).

? ? ?這里的HEAD可以被寫成任何一次提交的SHA-1.

? ? ?不帶soft和hard參數(shù)的git reset,實(shí)際上帶的是默認(rèn)參數(shù)mixed.

?

? ? ?總結(jié):

? ? ?git reset --mixed id,是將git的HEAD變了(也就是提交記錄變了),但文件并沒有改變,(也就是working tree并沒有改變). 取消了commit和add的內(nèi)容.

?????git reset --soft id. 實(shí)際上,是git reset –mixed id 后,又做了一次git add.即取消了commit的內(nèi)容.

?????git reset --hard id.是將git的HEAD變了,文件也變了.

? ? ?按改動(dòng)范圍排序如下:

? ? ?soft (commit) < mixed (commit + add) < hard (commit + add + local working)

git revert

反轉(zhuǎn)撤銷提交.只要把出錯(cuò)的提交(commit)的名字(reference)作為參數(shù)傳給命令就可以了.

git revert HEAD: 撤銷最近的一個(gè)提交.

git revert會(huì)創(chuàng)建一個(gè)反向的新提交,可以通過參數(shù)-n來告訴Git先不要提交.

git rm

git rm file: 從staging區(qū)移除文件,同時(shí)也移除出工作目錄.

git rm --cached: 從staging區(qū)移除文件,但留在工作目錄中.

git rm --cached從功能上等同于git reset HEAD,清除了緩存區(qū),但不動(dòng)工作目錄樹.

git clean

git clean是從工作目錄中移除沒有track的文件.

通常的參數(shù)是git clean -df:

-d表示同時(shí)移除目錄,-f表示force,因?yàn)樵趃it的配置文件中, clean.requireForce=true,如果不加-f,clean將會(huì)拒絕執(zhí)行.

git mv

git rm - - cached orig; mv orig new; git add new

git stash

把當(dāng)前的改動(dòng)壓入一個(gè)棧.

git stash將會(huì)把當(dāng)前目錄和index中的所有改動(dòng)(但不包括未track的文件)壓入一個(gè)棧,然后留給你一個(gè)clean的工作狀態(tài),即處于上一次最新提交處.

git stash list會(huì)顯示這個(gè)棧的list.

git stash apply:取出stash中的上一個(gè)項(xiàng)目(stash@{0}),并且應(yīng)用于當(dāng)前的工作目錄.

也可以指定別的項(xiàng)目,比如git stash apply stash@{1}.

如果你在應(yīng)用stash中項(xiàng)目的同時(shí)想要?jiǎng)h除它,可以用git stash pop

刪除stash中的項(xiàng)目:

git stash drop: 刪除上一個(gè),也可指定參數(shù)刪除指定的一個(gè)項(xiàng)目.

git stash clear: 刪除所有項(xiàng)目.

git branch

git branch可以用來列出分支,創(chuàng)建分支和刪除分支.

git branch -v可以看見每一個(gè)分支的最后一次提交.

git branch: 列出本地所有分支,當(dāng)前分支會(huì)被星號(hào)標(biāo)示出.

git branch (branchname): 創(chuàng)建一個(gè)新的分支(當(dāng)你用這種方式創(chuàng)建分支的時(shí)候,分支是基于你的上一次提交建立的).

git branch -d (branchname): 刪除一個(gè)分支.

刪除remote的分支:

git push (remote-name) :(branch-name): delete a remote branch.

這個(gè)是因?yàn)橥暾拿钚问绞?

git push remote-name local-branch:remote-branch

而這里local-branch的部分為空,就意味著刪除了remote-branch

git checkout

  git checkout (branchname)

切換到一個(gè)分支.

git checkout -b (branchname): 創(chuàng)建并切換到新的分支.

這個(gè)命令是將git branch newbranch和git checkout newbranch合在一起的結(jié)果.

checkout還有另一個(gè)作用:替換本地改動(dòng):

git checkout --

? ? ?此命令會(huì)使用HEAD中的最新內(nèi)容替換掉你的工作目錄中的文件.已添加到暫存區(qū)的改動(dòng)以及新文件都不會(huì)受到影響.

? ? ?注意:git checkout filename會(huì)刪除該文件中所有沒有暫存和提交的改動(dòng),這個(gè)操作是不可逆的.

?

git merge

? ? ?把一個(gè)分支merge進(jìn)當(dāng)前的分支.

? ? ?git merge [alias]/[branch]

? ? ?把遠(yuǎn)程分支merge到當(dāng)前分支.

?

? ? ?如果出現(xiàn)沖突,需要手動(dòng)修改,可以用git mergetool.

? ? ?解決沖突的時(shí)候可以用到git diff,解決完之后用git add添加,即表示沖突已經(jīng)被resolved.

?

git tag

? ? ?tag a point in history as import.

? ? ?會(huì)在一個(gè)提交上建立永久性的書簽,通常是發(fā)布一個(gè)release版本或者ship了什么東西之后加tag.

? ? ?比如: git tag v1.0

? ? ?git tag -a v1.0, -a參數(shù)會(huì)允許你添加一些信息,即make an annotated tag.

? ? ?當(dāng)你運(yùn)行g(shù)it tag -a命令的時(shí)候,Git會(huì)打開一個(gè)編輯器讓你輸入tag信息.

? ? ?

? ? ?我們可以利用commit SHA來給一個(gè)過去的提交打tag:

? ? ?git tag -a v0.9 XXXX

?

? ? ?push的時(shí)候是不包含tag的,如果想包含,可以在push時(shí)加上--tags參數(shù).

? ? ?fetch的時(shí)候,branch HEAD可以reach的tags是自動(dòng)被fetch下來的, tags that aren’t reachable from branch heads will be skipped.如果想確保所有的tags都被包含進(jìn)來,需要加上--tags選項(xiàng).

?

git remote

? ? ?list, add and delete remote repository aliases.

? ? ?因?yàn)椴恍枰看味加猛暾膗rl,所以Git為每一個(gè)remote repo的url都建立一個(gè)別名,然后用git remote來管理這個(gè)list.

? ? ?git remote: 列出remote aliases.

? ? ?如果你clone一個(gè)project,Git會(huì)自動(dòng)將原來的url添加進(jìn)來,別名就叫做:origin.

? ? ?git remote -v:可以看見每一個(gè)別名對應(yīng)的實(shí)際url.

? ? ?git remote add [alias] [url]: 添加一個(gè)新的remote repo.

? ? ?git remote rm [alias]: 刪除一個(gè)存在的remote alias.

? ? ?git remote rename [old-alias] [new-alias]: 重命名.

? ? ?git remote set-url [alias] [url]:更新url. 可以加上—push和fetch參數(shù),為同一個(gè)別名set不同的存取地址.

?

git fetch

? ? ?download new branches and data from a remote repository.

? ? ?可以git fetch [alias]取某一個(gè)遠(yuǎn)程repo,也可以git fetch --all取到全部repo

? ? ?fetch將會(huì)取到所有你本地沒有的數(shù)據(jù),所有取下來的分支可以被叫做remote branches,它們和本地分支一樣(可以看diff,log等,也可以merge到其他分支),但是Git不允許你checkout到它們.?

?

git pull

? ? ?fetch from a remote repo and try to merge into the current branch.

? ? ?pull == fetch + merge FETCH_HEAD

? ? ?git pull會(huì)首先執(zhí)行g(shù)it fetch,然后執(zhí)行g(shù)it merge,把取來的分支的head merge到當(dāng)前分支.這個(gè)merge操作會(huì)產(chǎn)生一個(gè)新的commit.? ??

?????如果使用--rebase參數(shù),它會(huì)執(zhí)行g(shù)it rebase來取代原來的git merge.

??

?

git rebase

?????--rebase不會(huì)產(chǎn)生合并的提交,它會(huì)將本地的所有提交臨時(shí)保存為補(bǔ)丁(patch),放在”.git/rebase”目錄中,然后將當(dāng)前分支更新到最新的分支尖端,最后把保存的補(bǔ)丁應(yīng)用到分支上.

? ? ?rebase的過程中,也許會(huì)出現(xiàn)沖突,Git會(huì)停止rebase并讓你解決沖突,在解決完沖突之后,用git add去更新這些內(nèi)容,然后無需執(zhí)行commit,只需要:

? ? ?git rebase --continue就會(huì)繼續(xù)打余下的補(bǔ)丁.

? ? ?git rebase --abort將會(huì)終止rebase,當(dāng)前分支將會(huì)回到rebase之前的狀態(tài).

?

git push

? ? ?push your new branches and data to a remote repository.

? ? ?git push [alias] [branch]

? ? ?將會(huì)把當(dāng)前分支merge到alias上的[branch]分支.如果分支已經(jīng)存在,將會(huì)更新,如果不存在,將會(huì)添加這個(gè)分支.

? ? ?如果有多個(gè)人向同一個(gè)remote repo push代碼, Git會(huì)首先在你試圖push的分支上運(yùn)行g(shù)it log,檢查它的歷史中是否能看到server上的branch現(xiàn)在的tip,如果本地歷史中不能看到server的tip,說明本地的代碼不是最新的,Git會(huì)拒絕你的push,讓你先fetch,merge,之后再push,這樣就保證了所有人的改動(dòng)都會(huì)被考慮進(jìn)來.

?

git reflog

? ? ?git reflog是對reflog進(jìn)行管理的命令,reflog是git用來記錄引用變化的一種機(jī)制,比如記錄分支的變化或者是HEAD引用的變化.

? ? ?當(dāng)git reflog不指定引用的時(shí)候,默認(rèn)列出HEAD的reflog.

? ? ?HEAD@{0}代表HEAD當(dāng)前的值,HEAD@{3}代表HEAD在3次變化之前的值.

? ? ?git會(huì)將變化記錄到HEAD對應(yīng)的reflog文件中,其路徑為.git/logs/HEAD, 分支的reflog文件都放在.git/logs/refs目錄下的子目錄中.

?

?

特殊符號(hào):

?????^代表父提交,當(dāng)一個(gè)提交有多個(gè)父提交時(shí),可以通過在^后面跟上一個(gè)數(shù)字,表示第幾個(gè)父提交: ^相當(dāng)于^1.

?????~相當(dāng)于連續(xù)的個(gè)^.

更多Git相關(guān)技術(shù)文章,請?jiān)L問Git使用教程欄目!

以上是Git常用命令總結(jié)的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

.git目錄是什么,其中包含什么? .git目錄是什么,其中包含什么? Jun 20, 2025 am 12:12 AM

.git目錄是Git倉庫的核心,包含版本控制所需的所有數(shù)據(jù)。1.它存儲(chǔ)了對象(如提交、樹、標(biāo)簽)、引用(如分支和標(biāo)簽指針)、HEAD當(dāng)前分支信息、索引暫存區(qū)、配置文件等關(guān)鍵內(nèi)容。2.用戶通常無需手動(dòng)操作這些文件,因直接編輯可能導(dǎo)致倉庫損壞,如刪除文件、修改引用或破壞索引。3.若出現(xiàn)問題,可用gitfsck或gitreflog進(jìn)行修復(fù)。4.雖不應(yīng)隨意更改.git內(nèi)容,但查看其中文件如HEAD、config和日志可幫助理解Git運(yùn)作機(jī)制。了解.git的結(jié)構(gòu)有助于深入掌握Git工作原理。

什么是三向合并? 什么是三向合并? Jun 19, 2025 am 12:07 AM

三路合并是一種使用原始版本和兩個(gè)修改版本來更準(zhǔn)確地解決沖突的合并方法。1.它基于三個(gè)版本:共同祖先(基礎(chǔ)版本)、你的更改(本地版本)和他人的更改(遠(yuǎn)程版本)。2.系統(tǒng)通過比較兩個(gè)修改版本與基礎(chǔ)版本,識(shí)別出重疊修改并標(biāo)記沖突區(qū)域以供手動(dòng)處理。3.與兩路比較相比,它能更好地理解變更上下文,減少誤報(bào)并提高自動(dòng)合并的安全性。4.常見于Git分支合并、PullRequest及高級合并工具中。5.使用時(shí)需確保所選基礎(chǔ)版本為真正的共同祖先,并選用支持三路合并的工具以保證準(zhǔn)確性。

.gitignore文件的目的是什么? .gitignore文件的目的是什么? Jun 22, 2025 am 12:11 AM

.gitignore文件用于指定Git應(yīng)忽略的文件或文件夾,防止其被提交到版本庫,從而避免不必要的或敏感文件被追蹤。其核心作用包括:1.排除開發(fā)過程中生成的臨時(shí)文件如node_modules、.env、.log等;2.避免操作系統(tǒng)或編輯器產(chǎn)生的特定文件進(jìn)入版本控制;3.清理構(gòu)建工具生成的編譯產(chǎn)物如dist/、build/目錄;4.設(shè)置時(shí)需注意語法如通配符*、目錄以/結(jié)尾、!表示例外。若已提交文件后才添加.gitignore,需手動(dòng)運(yùn)行g(shù)itrm-r--cached.清除緩存后再重新提交。

如何從遠(yuǎn)程服務(wù)器克隆現(xiàn)有的GIT存儲(chǔ)庫? 如何從遠(yuǎn)程服務(wù)器克隆現(xiàn)有的GIT存儲(chǔ)庫? Jun 24, 2025 am 12:05 AM

cloneAgitRepositor,SuseGitiationStalledByCheckingWithGit- versionandInstallingifNeed。(1)setUpyourusernAmeAneAneAmeAneMailDemailusiseGitConfig。(2)useGitCloneFollowEdfOlledBolotef theRepositoryUrlltocreateAtolecalCopy

哪些常見的GIT工作流程(例如,Gitflow,Github流)? 哪些常見的GIT工作流程(例如,Gitflow,Github流)? Jun 21, 2025 am 12:04 AM

常見的Git工作流包括Gitflow、GitHubFlow和GitLabFlow,各自適用于不同開發(fā)場景。Gitflow適合有計(jì)劃發(fā)布的項(xiàng)目,通過main、develop、feature、release和hotfix分支實(shí)現(xiàn)結(jié)構(gòu)化管理;GitHubFlow以單一主分支為核心,強(qiáng)調(diào)持續(xù)交付,適合需要頻繁部署的小型團(tuán)隊(duì)或Web應(yīng)用;GitLabFlow在GitHubFlow基礎(chǔ)上增加環(huán)境感知能力,支持多環(huán)境部署并使用標(biāo)簽追蹤生產(chǎn)狀態(tài)。每種流程各有優(yōu)劣,選擇時(shí)應(yīng)根據(jù)團(tuán)隊(duì)規(guī)模、項(xiàng)目類型和發(fā)布頻率進(jìn)行調(diào)整

如何清除整個(gè)儲(chǔ)藏列表? 如何清除整個(gè)儲(chǔ)藏列表? Jul 01, 2025 am 12:02 AM

要清除Git中的整個(gè)stash列表,沒有直接的內(nèi)置命令,但可以通過幾個(gè)步驟完成。首先運(yùn)行g(shù)itstashlist查看當(dāng)前所有stash條目,然后逐個(gè)使用gitstashdropstash@{n}刪除,或者使用gitreflogdelete--expire-unreachable=nowrefs/stash和gitgc--prune=now一次性強(qiáng)制清除所有stash,此外也可以使用bash循環(huán)命令whilegitstashlist|grep-q'^stash@';dogitstashdrop;d

什么是git子模型,為什么使用它們? 什么是git子模型,為什么使用它們? Jun 25, 2025 am 12:13 AM

Git子模塊允許將一個(gè)Git倉庫作為子目錄嵌入另一個(gè)倉庫,適用于引用外部項(xiàng)目或組件而不合并其歷史記錄。使用子模塊的原因包括:管理具有獨(dú)立版本控制的第三方庫、維護(hù)項(xiàng)目不同部分的獨(dú)立開發(fā)歷史、在多個(gè)項(xiàng)目間共享代碼。子模塊的工作原理是:添加子模塊時(shí),Git會(huì)記錄應(yīng)使用的具體提交,父項(xiàng)目僅跟蹤該提交而非子模塊內(nèi)的文件變化;克隆主倉庫后需初始化并更新子模塊;子模塊信息存儲(chǔ)于.gitmodules文件及.git/config中,實(shí)際文件位于.git/modules/路徑下。適用場景包括:嚴(yán)格控制外部依賴版本

git提取和git拉力有什么區(qū)別? git提取和git拉力有什么區(qū)別? Jun 17, 2025 am 09:19 AM

Gitfetch和Gitpull的主要區(qū)別在于:gitfetch只從遠(yuǎn)程倉庫獲取更改而不合并,gitpull則會(huì)獲取并自動(dòng)合并更改到當(dāng)前分支。具體來說:1.gitfetch用于下載遠(yuǎn)程更新,但不會(huì)修改本地文件或分支,適合在應(yīng)用更改前進(jìn)行審查;2.gitpull相當(dāng)于先執(zhí)行g(shù)itfetch再執(zhí)行g(shù)itmerge,適用于信任新更改且希望快速更新的場景;3.當(dāng)需要控制合并時(shí)機(jī)或排查問題時(shí)應(yīng)使用gitfetch,而gitpull更適合自動(dòng)化流程或穩(wěn)定分支的快速更新。

See all articles