干貨!很久沒(méi)有來(lái)寫(xiě)文章了,這次總結(jié)了一下工作中常用的 git 命令和使用方法,適合初學(xué)者學(xué)習(xí)!
- 初始化項(xiàng)目 -
git init - 查看狀態(tài) -
git status - track 新增文件 -
git add
- 文件狀態(tài)變化:Untracked —> Staged
- 一次性添加所有未添加文件 -
git add . - 允許使用 wildcard, e.g.
git add js/*.js
- Commit 變動(dòng)的文件(added, modified, deleted) -
git commit
- 除了新添加的文件,其它的(modified, deleted)都可以直接 commit -
git commit -a - 上面的 commit 動(dòng)作都會(huì)打開(kāi)一個(gè)臨時(shí)文件 COMMIT_EDITMSG,使用 vim 來(lái)編輯 commit 信息
- 當(dāng) commit 信息很少時(shí),可以直接添加單行信息 -
git commit -m "Your commit message here"
- 查看 log 記錄 -
git log
- 更詳細(xì)的 log 信息 -
git log --summary
- 將本地倉(cāng)庫(kù)添加到遠(yuǎn)端倉(cāng)庫(kù) -
git remote add origin [remote git address here]
- 其中,origin 為自己給遠(yuǎn)端起的名字,可以為任意名字,但通常命名為 origin
- 最后一個(gè) argument 是遠(yuǎn)端倉(cāng)庫(kù)地址
- 將本地倉(cāng)庫(kù)內(nèi)容推送到遠(yuǎn)端倉(cāng)庫(kù) -
git push -u origin master
- 其中,origin 為遠(yuǎn)端倉(cāng)庫(kù)名稱(chēng),origin 后面的名稱(chēng)是要推送上去的分支名稱(chēng),此處 master 為主支
-
-u表示記住這次 push 的 parameters,下次如果要做同樣的操作,直接 git push 即可 (所以不加 -u 也是沒(méi)問(wèn)題的)
- 拉取遠(yuǎn)端倉(cāng)庫(kù)內(nèi)容(來(lái)更新本地內(nèi)容)-
git pull origin master
- 注意,此時(shí)如果有尚未 commit 的本地內(nèi)容并且會(huì)引起 merge conflit,需要先 commit 然后 pull。如果還不想 commit,那么可以先隱藏起來(lái),pull,然后恢復(fù) -
git stash(hide)—>git stash apply(show)
- 查看現(xiàn)在本地倉(cāng)庫(kù)的內(nèi)容與最近一次 commit 的區(qū)別 -
git diff
- 默認(rèn)情況下 HEAD 指向最近一次 commit,如果 HEAD 指向以前的 commit,則可以用
git diff HEAD - 可以使用
git diff --staged來(lái)查看 just staged 的 file
- Unstaging file(s) -
git reset [fileName] - 重置文件 -
git checkout -- [fileName]
- 這個(gè)操作把文件重置到最近一次 commit 的狀態(tài),而 reset 只是把文件從 staged 變回了 unstaged,并沒(méi)有重置
- 新建分支 -
git branch [branchName]
- 切換到某個(gè)分支 -
git checkout [branchName] - 新建一個(gè)分支并切換到這個(gè)分支下(等于同時(shí)做了上面兩個(gè)操作) -
git checkout -b [branchName]
- 合并分支 -
git merge [branchName]
- 將某分支與當(dāng)前分支合并,通常是一個(gè)新 feature 寫(xiě)好了,然后添加到主分支里
- 當(dāng)一個(gè)文件被同時(shí)修改時(shí),merge conflit 可能會(huì)發(fā)生
- 合并后可以將廢棄的分支刪除 -
git branch -d [branchName]。尚未被 merge 的分支不可以被這樣刪除,如果一定要?jiǎng)h除(比如做了一半的 feature 不想要了),則用git branch -d -f [branchName]orgit branch -D [branchName](強(qiáng)制刪除)
- 添加子模塊
- 我們經(jīng)常會(huì)遇到一種情況,就是在一個(gè)項(xiàng)目目錄下,會(huì)用到另外一個(gè)項(xiàng)目的東西
- 命令
git submodule add [repository address]會(huì)添加并克隆子項(xiàng)目到當(dāng)前目錄下 - 更多內(nèi)容,請(qǐng)看官方文檔
git-flow
在 git 的基礎(chǔ)上封裝并拓展,實(shí)現(xiàn)了 Vincent Driessen 的 git branching model
總結(jié)
以上為 git 的基礎(chǔ)用法,實(shí)際生產(chǎn)環(huán)境中可能還需根據(jù)項(xiàng)目的不同有所變動(dòng),git-flow 是一個(gè)很不錯(cuò)的開(kāi)發(fā)流程,并且簡(jiǎn)化了許多操作,有興趣的同學(xué)可以去查詢(xún)參考一下。
蟹蟹!