(轉(zhuǎn)載)學(xué)習(xí)
常用命令
#下載項目
$ git clone git://github.com/jquery/jquery.git
#添加項目到暫存區(qū),點號表示添加所有
$ git add <filename>/.
#提交暫存區(qū)到倉庫區(qū)
$ git commit -m [message] #或者git commit -a
#推送項目到遠程地址
$ git push
# 強行推送當(dāng)前分支到遠程倉庫,即使有沖突
$ git push [remote] --force
基本命令
#創(chuàng)建并切換分支
$ git checkout -b branchName #每次開發(fā)新功能乘凸,都應(yīng)該新建一個單獨的分支
#添加當(dāng)前目錄的所有文件到暫存區(qū)
$ git add .
#用互動的模式來確認要加入的檔案
$ git add -i:
#HEAD指針
HEAD指針總是指向分支的最新提交鸥拧。每當(dāng)你做出了一個提交党远,HEAD更新為最新提交削解。
HEAD樹枝存儲在.git/refs/heads/ 目錄中富弦。
cat .git/HEAD
ref: refs/heads/master
#新建分支
$ git branch [branchName]
查看命令
$ git show # 顯示某次提交的內(nèi)容
$ git log --since="6 hours" # 顯示最近6小時提交
$ git log --before="2 days" # 顯示2天前提交
$ git log <file> # 查看該文件每次提交記錄
合并分支
git merge <branch> # 將branch分支合并到當(dāng)前分支
Git分支操作: 創(chuàng)建分支后, 分支操作不會影響master分支, 但是master分支改變會影其它分支;
--列出分支 :$ git branch ;
--切換分支 :git checkout master
--提交分支 : git push origin branchName ;
--刪除分支 : git branch -d branchName , 強制刪除分支 git branch -D branchName
--合并分支 : git merge branchName ;
遠程分支
$ git pull # 抓取遠程倉庫所有分支更新并合并到本地
$ git push origin master # 將本地主分支推到遠程主分支 master 可以換成你想要的任何分支
# 將本地主分支推到遠程(如無遠程主分支則創(chuàng)建,用于初始化遠程倉庫)
$ git push -u origin master
# 查看遠程倉庫:
$ git remote -v
# 下載遠程倉庫的所有變動
$ git fetch [remote]
Git主分支的名字氛驮,默認叫做Master腕柜。它是自動建立的,版本庫初始化以后矫废,默認就是在主分支在進行開發(fā)盏缤。
別名注冊
git ci
相當(dāng)于git commit
,輸入git st
相當(dāng)于git status
蓖扑“ν可以自己注冊別名:
$sudo git config --system alias.st status
$sudo git config --system alias.ci commit
$sudo git config --system alias.co checkout
$sudo git config --system alias.br branch
在Git中,用兩種方法將兩個不同的branch
合并律杠。一種是通過git merge
潭流,一種是通過git rebase
。
與 git merge
不同的是柜去, git rebase
不單單只是將兩個不同的branch
合并起來灰嫉,而是將某一支 branch
基于另一支 branch
的內(nèi)容合并起來
分支的開發(fā)過程中,要經(jīng)常與主干保持同步嗓奢。
$ git fetch origin
$ git rebase origin/master
合并commit
分支開發(fā)完成后讼撒,很可能有一堆commit message
,但是合并到主干的時候股耽,往往希望只有一個(或最多兩三個)commit message
根盒,這樣不僅清晰,
也容易管理物蝙。那么郑象,怎樣才能將多個commit
合并呢?這就要用到 git rebase
命令茬末。git rebase
是對commit history
的改寫厂榛。
$ git rebase -i origin/master
git rebase
命令的i
參數(shù)表示互動(interactive),這時git會打開一個互動界面丽惭,進行下一步操作击奶。
pick:正常選中
reword:選中,并且修改提交信息责掏;
edit:選中柜砾,rebase時會暫停,允許你修改這個commit(參考這里)
squash:選中换衬,會將當(dāng)前commit與上一個commit合并
fixup:與squash相同痰驱,但不會保存當(dāng)前commit的提交信息
exec:執(zhí)行其他shell命令
合并commit
后证芭,就可以推送當(dāng)前分支到遠程倉庫了。
$ git push --force origin myfeature
git push
命令要加上force
參數(shù)担映,因為rebase
以后废士,分支歷史改變了,跟遠程分支不一定兼容蝇完,有可能要強行推送
當(dāng)出現(xiàn)no changes added to commit
時如何正確使用git提交命令?
對于這個問題官硝,最好的解決方法就是按如下步驟:
1.到根目錄下:git add . ;("."是必須要的)
2.git commit -m "some word"
3.git push -u origin master
上面命令將本地的master
分支推送到origin
主機短蜕,同時指定origin
為默認主機氢架,后面就可以不加任何參數(shù)使用git push
了。
當(dāng)出現(xiàn):changes not staged for commit
sudo rm -Rf .git #強制遞歸刪除
git push origin master
的意思就是將本地的master
分支推送到origin主機的master
分支朋魔。如果后者不存在岖研,則會被新建。
git push
是上傳本地所有分支代碼到遠程對應(yīng)的分支上警检。
當(dāng)出現(xiàn)nothing to commit, working directory clean
這說明你現(xiàn)在的工作目錄相當(dāng)干凈孙援。換句話說,所有已跟蹤文件在上次提交后都未被更改過解滓。此外赃磨,上面的信息還表明,當(dāng)前目錄下沒有出現(xiàn)任何處于未跟蹤的新文件洼裤,否則 Git 會在這里列出來邻辉。最后,該命令還顯示了當(dāng)前所在的分支是 master腮鞍,這是默認的分支名稱值骇,實際是可以修改的