下面是自己學(xué)習(xí)使用git的常用的命令,還有些使用過程中碰到問題的解決辦法,現(xiàn)整理如下。
git clone 從遠(yuǎn)程主機(jī)克隆一個(gè)版本庫(kù)
$ git clone <版本庫(kù)的網(wǎng)址>
$ git clone <版本庫(kù)的網(wǎng)址> <本地目錄名> (線上目錄名和本地不一樣)
git remote 列出所有遠(yuǎn)程主機(jī)名 (便于管理,git要求每個(gè)遠(yuǎn)程主機(jī)都帶一個(gè)主機(jī)名)
$ git remote -v 查看遠(yuǎn)程主機(jī)網(wǎng)址
$ git clone -o jQuery https://github.com/jquery/jquery.git? (克隆版本庫(kù)時(shí)所有主機(jī)自動(dòng)被命名為origin。若用-o可以改變命名)
$ git remote show <主機(jī)名>? (查看主機(jī)詳細(xì)信息)
$ git remote add <主機(jī)名> <網(wǎng)址> (添加遠(yuǎn)程主機(jī))
$ git remote rm <主機(jī)名> (刪除遠(yuǎn)程主機(jī))
$ git remote rename <原主機(jī)名> <新主機(jī)名> (修改遠(yuǎn)程主機(jī)名)
git fetch
git fetch命令通常用來查看其他人的進(jìn)程,因?yàn)樗』氐拇a對(duì)你本地的開發(fā)代碼沒有影響。
默認(rèn)情況下,git fetch取回所有分支(branch)的更新。
$ git fetch <遠(yuǎn)程主機(jī)名> <分支名>? (取回特定分支的更新)
$ git fetch origin master (比如取回origin主機(jī)的master分支)
$ git checkout -b newBrach origin/master (git fetch取回遠(yuǎn)程分支后可以基于此創(chuàng)建一個(gè)本地分支)
git pull
git pull命令的作用是,取回遠(yuǎn)程主機(jī)某個(gè)分支的更新,再與本地的指定分支合并
$ git pull <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名>
取回origin主機(jī)的next分支,與本地的master分支合并,需要寫成下面這樣。
$ git pull origin next:master
如果遠(yuǎn)程分支是與當(dāng)前分支合并,則冒號(hào)后面的部分可以省略。
$ git pull origin next
上面命令表示,取回origin/next分支,再與當(dāng)前分支合并,實(shí)質(zhì)上,這等同于先做git fetch,再做git merge
在某些場(chǎng)合,Git會(huì)自動(dòng)在本地分支與遠(yuǎn)程分支之間,建立一種追蹤關(guān)系(tracking)。比如,在git clone的時(shí)候,所有本地分支默認(rèn)與遠(yuǎn)程主機(jī)的同名分支,建立追蹤關(guān)系,也就是說,本地的master分支自動(dòng)”追蹤”origin/master分支。
Git也允許手動(dòng)建立追蹤關(guān)系。
git branch –set-upstream master origin/next
上面命令指定master分支追蹤origin/next分支。
如果當(dāng)前分支與遠(yuǎn)程分支存在追蹤關(guān)系,git pull就可以省略遠(yuǎn)程分支名。
git push
將本地分支的更新,推送到遠(yuǎn)程主機(jī)
$ git push <遠(yuǎn)程主機(jī)名> <本地分支名>:<遠(yuǎn)程分支名>
注意,分支推送順序的寫法是<來源地>:<目的地>,所以git pull是<遠(yuǎn)程分支>:<本地分支>,而git push是<本地分支>:<遠(yuǎn)程分支>。
$ git push -f <遠(yuǎn)程主機(jī)名> <本地分支名>:<遠(yuǎn)程分支名> (強(qiáng)制提交,非自己的分支強(qiáng)烈不建議使用)
從遠(yuǎn)程pull一個(gè)本地不存在的分支的方法?
1、git checkout -b local_branch origin/remote_branch
2、git fetch將遠(yuǎn)程分支信息獲取到本地,在執(zhí)行1的方法。
git的選擇性合并
具體操作步驟:
假如在當(dāng)前的A分支上要合并B分支的某一個(gè)文件
先切回到A分支
然后執(zhí)行 git checkout B xx.php
xx.php直接會(huì)覆蓋A分支上的xx.php文件
(注意會(huì)直接將文件覆蓋,并不會(huì)合并文件,比如在A的xx.php有修改,在B的xx.php有修改,執(zhí)行上述操作會(huì)直接把B的xx.php覆蓋A,若想解決用下面的步驟)
先在A分支的基礎(chǔ)上建一個(gè) A-temp分支,拿這個(gè)A-temp分支和B分支合并,之后切回到A分支,然后把A-temp分支的文件覆蓋A分支相對(duì)應(yīng)的文件即可。
其它命令
提交:git commit -a
對(duì)最近一次commit的進(jìn)行修改:git commit -a –amend
commit之后,如果想撤銷最近一次提交(即退回到上一次版本)并本地保留代碼:git reset HEAD^
合并分支:(merge from) $ git checkout master
$ git merge mybranch (merge from mybranch)
刪除分支: $ git branch -d mybranch
強(qiáng)制刪除分支: $ git branch -D mybranch
列出所有分支: $ git branch
查看各個(gè)分支最后一次提交: $ git branch -v
查看哪些分支合并入當(dāng)前分支: $ git branch –merged
查看哪些分支未合并入當(dāng)前分支: $ git branch –no-merged
更新遠(yuǎn)程庫(kù)到本地: $ git fetch origin
推送分支: $ git push origin mybranch
取遠(yuǎn)程分支合并到本地: $ git merge origin/mybranch
取遠(yuǎn)程分支并分化一個(gè)新分支: $ git checkout -b mybranch origin/mybranch
刪除遠(yuǎn)程分支:$ git push origin :mybranch
分支合并后刪除文件問題
問題:A分支有10個(gè)文件,B分支有8個(gè)文件,這8個(gè)文件在A分支和B分支都是一樣的,現(xiàn)在切換到A分支執(zhí)行合并命令,結(jié)果A分支的兩個(gè)文件被刪除啦,但是還想在A分支保留那兩個(gè)文件,該如何處理。
解決:merge的概念是 “把其他分支的變更合并到本分支”。在其他分支刪除也是一種merge需要合并的變更
先將A創(chuàng)建一個(gè)臨時(shí)分支temp_A,將A和B合并,在將temp_A把A刪除的兩個(gè)文件還原
$ git checkout (含有想恢復(fù)的文件的commit) — (想恢復(fù)的文件1的路徑) (想恢復(fù)的文件2的路徑)