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