新聞中心
前言

目前創(chuàng)新互聯(lián)建站已為超過千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、塔城網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
作為一個開發(fā)者,如果現(xiàn)在還不知道git或者還不會使用git,那么你應(yīng)該好好的反省。自己去好好看一遍的入門介紹吧。今天只是對自己在日常中使用git的一些常用命令的介紹與自己認為不錯且能提高我們辦公效率的命令。內(nèi)容可能會有點雜亂,但絕對都是經(jīng)典的命令,在此記下筆記,也希望能幫助來賞臉關(guān)顧的你們。
區(qū)域
在這之前,來介紹一下git的三個區(qū)域
- 工作區(qū)(working directory)
- 暫存區(qū)(stage index)
- 本地歷史區(qū)(history)
通過一張圖就能簡潔易懂的明白它們之間的轉(zhuǎn)化。
clone
先從clone命令來介紹,使用過git的都知道它。git colne命令拉取遠程倉庫到本地。但當我們要拉取到指定的文件夾下時,你可能會直接mkdir,其實無需如此,一條命令就能搞定git clone 遠程倉庫 文件名,就是如此簡單。
rm
我們在工作中可能會遇到這么一種情況,使用git add .直接將工作區(qū)的所有修改的文件加入到暫存區(qū)了,但是后面發(fā)現(xiàn)有一個文件先不要加進去,此時我們就可以使用如下命令就可以將該文件退回到工作區(qū)中。
- git rm --cached
stash
有這么一種情況,當你正在開發(fā)中時,有一個線上的緊急bug需要修復(fù),此時開發(fā)中的功能又沒有完成你不想提交,此時你可以使用git stash將工作區(qū)的文件都存放起來。這時你就可以放心的去切分支修復(fù)bug,修復(fù)完之后執(zhí)行g(shù)it stash pop可以將先前存放的取出,當然也有一些其他的相關(guān)命令例如:git stash list查看存放的記錄,git stash drop丟棄存放的記錄。
tag
可能在開發(fā)中我們要打標簽git tag tagName,并且要將相應(yīng)的標簽推送到遠程倉庫中,此時可以使用如下命令進行推送。
- git push --tags tagName
amend
當你commit以后,發(fā)現(xiàn)有一個文件沒有加進上次的commit中,或者又修改了一些文件。此時你并不想增加新的commit信息,只是想將其加入到上次的commit中。這時你就可以使用
- git commit --amend
將暫存區(qū)的文件加入其中,并且你也可以修改此時的commit信息。
reset
reset也能實現(xiàn)前面的rm的效果,可以使用如下命令來替代前面的git rm --cached
- git reset HEAD
但reset用途更廣,結(jié)合soft參數(shù)可以回撤到任意的commit節(jié)點進行操作
- git reset --soft index
執(zhí)行該命令之后,就回到index處,工作區(qū)不變、暫存區(qū)回到當時的index處。另外還有一個hard參數(shù)。
- git reset --hard index
與soft可以說對立,它的效果就在于工作區(qū)與暫存區(qū)的不同,它會清空這兩個區(qū)。
rebase
對于rebase是重定向的意思,如果你當前的分支與遠程的分支commit信息存在差異時,會提醒你此時不能進行push,必須先將遠程的commit信息拉去到本地來,才能進行提交。對于這種情況就可以使用rebase命令了。如下當前處在develop分支
此時應(yīng)該先執(zhí)行rebase命令
- git fetch
- git rebase origin/master
執(zhí)行完之后,***再push到遠程master
- git push origin master
最終各個分支的情況就是上圖的效果了。如果覺得命令多難記,這里也可用一條命令來完成上面的效果
- git pull --rebase origin master
這是rebase的簡單運用,也是常見的命令了。下面介紹rebase的一個可選參數(shù)--onto。
--onto
使用場景:開發(fā)過程中我們都會創(chuàng)建不同的分支進行開發(fā)不同的功能,當你在分支A上創(chuàng)建了新分支B進行開發(fā)功能并且也提交了一些commit時,此時你發(fā)現(xiàn)原來A分支上有錯誤的commit,如果要rebase到master上時,不能將這個錯誤的commit也附帶上。這個時候就該--onto大顯神通了。
當前處在B分支,要得到上面的結(jié)果,只需執(zhí)行如下命令
- git rebase --onto master B
這個不僅可以針對不同的分支,也能作用于同一個分支上。所以針對上面的情況可以只對分支B進行操作,等價命令如下:
- git rebase --onto B
--interactive
當我們要修改commit信息的名稱時,如果要修改的commit處在***個時,可以使用
- git commit --amend
如果不是***個時,我們就要使用到rebase的--interactive可選參數(shù)了,可以簡寫為-i。
- git rebase -i
參數(shù)后面的commit hash code為需要修改的commit的前一個。執(zhí)行之后就會出現(xiàn)如下類似的信息:
- pick 137cf0a First coommit
- pick 163dc38 Second commit
- # Rebase f9aee6e..163dc38 onto f9aee6e (2 command(s))
- #
- # Commands:
- # p, pick = use commit
- # r, reword = use commit, but edit the commit message
- # e, edit = use commit, but stop for amending
- # s, squash = use commit, but meld into previous commit
- # f, fixup = like "squash", but discard this commit's log message
- # x, exec = run command (the rest of the line) using shell
- #
- # These lines can be re-ordered; they are executed from top to bottom.
- #
- # If you remove a line here THAT COMMIT WILL BE LOST.
- #
- # However, if you remove everything, the rebase will be aborted.
- #
- # Note that empty commits are commented out
根據(jù)提示我們可以有6個可選擇的操作。相信提示已經(jīng)說的很明顯了,對于我們這種要修改First coommit的情況,需要使用r。
- r 137cf0a First commit
- pick 163dc38 Second commit
執(zhí)行之后會跳到修該First coomit的界面,進行修改即可。
- First commit
- # Please enter the commit message for your changes. Lines starting
- # with '#' will be ignored, and an empty message aborts the commit.
- #
- # Date: Thu Jan 26 23:07:10 2017 +0800
- #
- # rebase in progress; onto f9aee6e
- # You are currently editing a commit while rebasing branch 'master' on 'f9aee6e'.
- #
- # Changes to be committed:
- # new file: file1
至于其他的操作項,有興趣的可以自己去嘗試一下。例如s操作就可以用來合并commit。
branch
相信branch都很熟悉,我這里要說的是他的另一種可能會用到的情況。場景是這樣的:如果在你進行創(chuàng)建新的分支時,并不想從當前的commit信息節(jié)點進行創(chuàng)建分支。
要實現(xiàn)如上效果只需在創(chuàng)建分支時在后面再添加額外的參數(shù),該參數(shù)就是你所需調(diào)到的commit節(jié)點的hash code
- git branch new_branch
push
這里提一下push的--set-upstream,它的效果是設(shè)置上游分支,當我們將遠程不存在的本地分支推送到遠程時,如果不在推送的分支上,我們一般會使用如下命令進行推送。
- git checkout push_branch
- git push origin push_branch
下面是簡潔的方法,使用該參數(shù)無需切換分支,可以直接使用如下命令進行推送。
- git push --set-upstream origin push_branch
cherry-pick
這個命令的場景是:當你所在的分支沒用,你要刪除它,但其中的一個commit你還是想推送到遠程master上。
將分支切換到master,執(zhí)行以下命令:
- git cherry-pick
merge
我們所熟知的是使用merge來進行分支的合并,每次使用merge時都會自動將副分支合并成一個commit進行推送到主分支上,那么如果我不想它自動推送到主分支上時(可能我還需要進行修改),這時就可以使用--squash操作
- git merge --squash dev_branch
執(zhí)行完以上命令后,我們就可以在暫存區(qū)看到一個還未提交的文件狀態(tài)。
reflog
當我們切分支太頻繁了之后,可能會忘了一些分支是從哪個分支切過來的,此時可以使用如下命令查看:
- git reflog
- 894a16d HEAD@{0}: commit: commit another todo
- 6876e5b HEAD@{1}: checkout: moving from solve_world_hunger to kill_the_batman
- 324336a HEAD@{2}: commit: commit todo
- 6876e5b HEAD@{3}: checkout: moving from blowup_sun_for_ransom to solve_world_hunger
- 6876e5b HEAD@{4}: checkout: moving from kill_the_batman to blowup_sun_for_ransom
- 6876e5b HEAD@{5}: checkout: moving from cure_common_cold to kill_the_batman
- 6876e5b HEAD@{6}: commit (initial): initial commit
這樣我們就可以看到所用的操作歷史了。這樣如果我們使用git reset命令不小心刪除了需要的東西??梢酝ㄟ^此來查找到刪除操作的hash code,之后就可以通過如下命令進行恢復(fù)。
- git checkout
目前想到的就這些了,希望能有所幫助
當前標題:git使用雜記
轉(zhuǎn)載來于:http://www.5511xx.com/article/dhesjec.html


咨詢
建站咨詢
