一、基本操作
用
git init
來在目錄中創建新的 Git 倉庫。 你可以在任何時候、任何目錄中這么做,完全是本地化的。使用
git clone
拷貝一個 Git 倉庫到本地,讓自己能夠查看該項目,或者進行修改。使用
git add
添加需要追蹤的新文件和待提交的更改到暫存區, 然后使用git status
和git diff
查看有何改動, 最后用git commit
將你的快照記錄。這就是你要用的基本流程,絕大部分時候都是這樣的。在當前工作目錄執行命令:
git add .
Git 會遞歸地將你執行命令時所在的目錄中的所有文件添加上去.執行
git status
以查看在你上次提交之后有啥被修改或者臨時提交了, 從而決定自己是否需要提交一次快照,同時也能知道有什么改變被記錄進去了。git diff
顯示已寫入緩存與已修改但尚未寫入緩存的改動的區別,執行git diff
來查看執行git status
的結果的詳細信息 —— 一行一行地顯示這些文件是如何被修改或寫入緩存的。
git diff HEAD
—— 顯示的是工作目錄與上一次提交的更新的區別,無視緩存。git commit -a
自動將在提交前將已記錄、修改的文件放入緩存區,基本上這句話的意思就是,為任何已有記錄的文件執行git add .
不過你仍然需要執行git add 文件名
來添加新文件git 對本地文件的文件名的大小寫是不敏感額,如果修改文件名的大小寫不會添加修改,命令行運行下列代碼,強制git對大小寫敏感
$ git config core.ignorecase false
git remote
命令列出所有遠程主機 使用-v
選項,可以參看遠程主機的網址
二、 常用命令
1. git branch
【 origin 指的是主機名 master 指的是分支名】
git branch -r
查看遠程分支
git branch -a
查看所有分支
git branch -d (branch name)
刪除本地分支
git branch (new-branch -name)
創建分支
git branch -v
查看各個分支最后一個提交對象的信息
git branch -m <old_branch_name> <new_branch_name>
重命名本地分支
2. git push
$ git push :
git push <遠程主機名> <本地分支名>:<遠程分支名>
執行 git push [alias 遠程倉庫名] [branch 遠程分支名],就會將你的當前 分支推送成為 [alias] 遠端上的 [branch] 分支。 讓我們試試推送我們的主分支到先前添加的“github”遠端倉庫上去。
$ git push origin master
如果省略遠程分支名,則表示將本地分支推送與之存在"追蹤關系"的遠程分支(通常兩者同名),如果該遠程分支不存在,則會被新建。
不帶任何參數的git push
,默認只推送當前分支,這叫做simple方式。
git push origin --delete <branchName>
刪除一個遠程分支
git push origin :<branchName>
推送一個空分支到遠程分支,其實就相當于刪除遠程分支
3. git pull
$ git pull
比如,取回origin主機的dev分支,與本地的master分支合并,需要寫成下面這樣。git pull <遠程主機名> <遠程分支名>:<本地分支名>
$ git pull origin dev:master
上面命令表示,取回origin/dev分支,再與當前master分支合并。實質上,這等同于先做git fetch,再做git merge。
$ git fetch
$ git fetch origin dev
$ git merge origin/dev
合并fetch下來的遠程dev分支數據到當前分支上
git fetch origin 遠程分支名:本地分支名
上面命令表示,取回origin/next分支,再與當前分支
合并。實質上,這等同于先做git fetch,再做git merge。
4. git checkout
git checkout -b [分支名] [遠程主機名]/[分支名]
5. git log
git log --oneline
顯示log一行摘要
git log --author="author-name"
顯示某個用戶提交的log
git log -p (file-name)
某個文件的提交log
6. git tag
- 列出現有標簽的命令
$ git tag
- 帶有通配符的列出命令
$ git tag -l 'v1.4.2.*'
- 新建標簽
$ git tag -a v1.4 -m 'my version 1.4'
引號里面的是標簽說明 - 把標簽推到git服務器上
$ git push origin [tagname]
- 一次推送所有本地新增的標簽到git服務器
git push origin --tags
7. git 追蹤關系
在某些場合,Git會自動在本地分支與遠程分支之間,建立一種追蹤關系(tracking)。比如,在git clone的時候,所有本地分支默認與遠程主機的同名分支,建立追蹤關系,也就是說,本地的master分支自動”追蹤”origin/master分支。
Git也允許手動建立追蹤關系。
git branch --set-upstream master origin/dev
上面命令指定本地master分支追蹤遠程 origin/dev分支。
但是據說上面--set-upstream
這個命令被廢棄了,建議使用--track 或者 --set-upstream-to
來代替
git branch --set-upstream-to=origin/遠程分支名 本地分支名
如果當前分支與遠程分支存在追蹤關系,git pull就可以省略遠程分支名。
$ git pull origin
上面命令表示,本地的當前分支自動與對應的origin主機”追蹤分支”(remote-tracking branch)進行合并。
如何查看本地跟蹤分支對應的遠程分支
git branch -vv(兩個v),就能夠看到本地分支跟蹤的遠程分支。
獲取遠程服務器上某個分支
加入服務器上被合作的伙伴新創建了一個分支,我們可以通過如下方式來獲?。?/p>
$ git fetch origin
然后我門會獲取到新的分支的名字
值得注意的是,在 fetch
操作下載好新的遠程分支之后,你仍然無法在本地編輯該遠程倉庫中的分支。換句話說,在本例中,你不會有一個新的new_added_branch
分支,有的只是一個你無法移動的 origin/new_added_branch
指針。
如果要把該內容合并到當前分支,可以運行 git merge origin/new_added_branch
。如果想要一份自己的 new_added_branch
來開發,可以在遠程分支的基礎上分化出一個新的分支來:
$ git checkout -b new_added_branch origin/new_added_branch
Branch new_added_branch set up to track remote branch refs/remotes/origin/new_added_branch.
Switched to a new branch "new_added_branch"
這會切換到新建的 new_added_branch
本地分支,其內容同遠程分支 origin/new_added_branch
一致,這樣你就可以在里面繼續開發了。
三、沖突解決
如果沒有沖突的話,merge完成。有沖突的話,git會提示那個文件中有沖突,比如有如下沖突:
<<<<<<< HEAD:test.c
printf (“test1″);
=======
printf (“test2″);
>>>>>>> issueFix:test.c
可以看到 ======= 隔開的上半部分,是 HEAD(即 master 分支,在運行 merge 命令時檢出的分支)中的內容,下半部分是在 issueFix 分支中的內容。解決沖突的辦法無非是二者選其一或者由你親自整合到一起。比如你可以通過把這段內容替換為下面這樣來解決:
printf (“test2″);
這個解決方案各采納了兩個分支中的一部分內容,而且刪除了 <<<<<<<,=======,和>>>>>>> 這些行。
在解決了所有文件里的所有沖突后,運行git add 將把它們標記為已解決(resolved)。
然后使用git commit命令進行提交,merge就算完成了