天天看點

(轉載)Git使用教程

轉載自:http://www.418log.org/post-89.html

.什麼是Git

     簡單地說,Git是 Linux 之父 Linus Trovalds,為管理 Linux 核心代碼而建立的,被認為是分布式版本控制工具中的頂級水準。智能、友好、強健、高效。 正如所提供的文檔中說的一樣,“Git 是一個快速、可擴充的分布式版本控制系統,它具有極為豐富的指令集,對内部系統提供了進階操作和完全通路。”發音:[英][ɡit] [美][ɡɪt]

     Torvalds 開始着手開發 Git 是為了作為一種過渡方案來替代 BitKeeper,後者之前一直是 Linux 核心開發人員在全球使用的主要源代碼工具。開放源碼社群中的有些人覺得 BitKeeper 的許可證并不适合開放源碼社群的工作,是以 Torvalds 決定着手研究許可證更為靈活的版本控制系統。盡管最初 Git 的開發是為了輔助 Linux 核心開發的過程,但是我們已經發現在很多其他自由軟體項目中也使用了 Git。例如,X.org 最近就遷移到 Git 上來了,很多 Freedesktop.org 的項目也遷移到了 Git 上。

2.Git的優勢

     Git 目前主要由尋找 CVS 或專有代碼管了解決方案替代物的軟體開發人員所使用。Git 與 CVS 有很多差別:

     分支更快、更容易。

     支援離線工作;本地送出可以稍後送出到伺服器上。

     Git 送出都是原子的,且是整個項目範圍的,而不像 CVS 中一樣是對每個檔案的。

     Git 中的每個工作樹都包含一個具有完整項目曆史的倉庫。

     沒有哪一個 Git 倉庫會天生比其他倉庫更重要。

3.Git版本控制

     簡單地說,就是将在本地開發的代碼,定時推送到伺服器。每一次修改,記錄下它的作者、時間及修改說明等。

     相對的,我們也可以從伺服器下拉其他人推送的代碼,并了解它的作者、時間、修改說明及其具體的修改内容。

     這樣,版本控制給團隊協作開發提供了極大的友善。即使是一個人開發,因為它記錄下了我們整個的開發曆史,也是極有幫助和價值的。

     比如,如果某次修改甚至整個系統出現問題,它也能幫助找回我們珍貴的代碼。

4.Git分布式版本控制

     更進一步,分布式版本控制工具使得我們在本機上即擁有完整的功能,不依賴于伺服器,使用更為友善。它們往往也提供其它更好用或更強大的功能,比如靈活的分支管理。

5.Git 工作流程

     1)使用中央伺服器輔助協作

     2) 每人在伺服器擁有一個以自己 id 為名稱的分支;

     3) 各人隻許推送更新到自己的分支,不允許推送到别人的分支或者 master;

     4) master 由專人管理,在合适時 merge 其它分支(開發初期每日自動 merge 各人分支,生産化後則由人工 merge 經過 review 的分支);

     5) 代碼修改 merge 到 master 後,将同步到所有終端。

首先下載下傳git用戶端程式,我下載下傳的是Git-1.8.3-preview20130601.exe,安裝後,執行Git Bash,這時你需要設定根據提示設定email和name,然後就可以建立自己的代碼庫了。

1、目前項目未執行初始化請執行下面操作

在本地建立新的Git倉庫(連接配接别人的代碼和建立自己的代碼庫)

mkdir andbase

cd andbase

git init

touch README.md

git add README.md

git commit -m 'hello world'

      git remote add origin [email protected]:zhaoqp2010/andbase.git

将主分支修改推送到伺服器

git push -u origin master

下載下傳主分支資料

git pull -u origin master

連接配接本地已有的 Git 倉庫

git remote add origin [email protected]:zhaoqp2010/andbase.git

2、送出代碼

進入存放你所要送出代碼的檔案夾下

git add .

git push -u origin yourbranch

3、下載下傳分支代碼

git pull  -u   origin yourbranch

4、檢視Git倉庫中的檔案狀态

git status

5、向伺服器的Git倉庫中送出本地Git倉庫已修改的檔案或目錄

git push -u   origin yourbranch

6、下載下傳伺服器端Git倉庫中的檔案或目錄到本地目前目錄。

git clone [email protected]:zhaoqp2010/andbase.git

7、檢視所有分支

git branch -a  

8、建立newbranch分支

git checkout -b newbranch

9、切換到master分支

git checkout yourbranch

10、送出所有修改

git commit -a

11、合并分支

将 coreteam/master 合并到本地的 newbranch 分支

先 git checkout newbranch 切換到newbranch分支

再 git merge coreteam/master

12、将主分支修改推送到伺服器

git push origin master  

13、将newbranch分支修改推送到伺服器

git push origin newbranch

以下内容轉自http://my.oschina.net/u/559701/blog/70010

git操作的常用指令,不是很全面,但是常用,個人開發筆記。

---------------------------------------------------------------------------------------------------

---------------------------------------分支操作-----------------------------------------------

1.察看項目的分支情況

<code>1</code>

<code>#進入項目目錄</code>

<code>2</code>

<code>cd</code> <code>REPOSITORIES/</code>

<code>3</code>

<code>git branch</code>

<code>4</code>

<code># 注意前面的*号表示目前處于那個分支&lt;span style="font-family:mceinline;"&gt;檢視遠端分支: &lt;strong&gt;git&lt;/strong&gt; branch -r&lt;/span&gt;</code>

2.建立新的分支

<code>git branch newbranch</code>

<code>#建立并進入新的分支</code>

<code>git checkout -b newbranch</code>

3.切換到分支

分支切換的時候要注意一個問題:在切換過程中,上一個分支的修改會帶到新的分支去。也就是說在分支切換的時候會帶上修改。如果要避免這樣情況,當然就是在切換之前把修改送出(commit)了。

<code>git checkout newbranch</code>

<code>#取消對file的修改</code>

<code>git checkout</code><code>file</code>

4.察看檔案修改情況

<code>git status</code>

            顯示如下的代碼:

<code># On branch new</code>

<code># Changes not staged for commit:</code>

<code>#   (use "git add/rm &lt;file&gt;..." to update what will be committed)</code>

<code>#   (use "git checkout -- &lt;file&gt;..." to discard changes in working directory)</code>

<code>5</code>

<code>#</code>

<code>6</code>

<code>#   deleted:    build.xml</code>

<code>7</code>

<code>8</code>

<code>no changes added to commit (use</code><code>"git add"</code> <code>and/or</code><code>"git commit -a"</code><code>)</code>

可以看到,他說删除了build.xml檔案。現在是處于new分支

5.送出修改

<code>#這樣是送出到目前分支去的</code>

<code>git commit -am</code><code>"commit message"</code>

6.删除分支

<code>git -d branch</code>

-------------------------------------------------------------------------------------------------------

----------------------------------------------------合并操作--------------------------------------

<code>git merge  --</code><code>type</code>  <code>branch</code>

<code>#其中的type可以是下面4種</code>

Straight merge 預設的合併模式,會有全部的被合併的 branch commits 記錄加上一個 merge-commit,看線圖會有兩條 Parents 線,並保留所有 commit log。

Squash commit 壓縮成隻有一個 merge-commit,不會有被合併的 log。SVN 的 merge 即是如此。

cherry-pick 隻合併指定的 commit

rebase 變更 branch 的分支點:找到要合併的兩個 branch 的共同的祖先,然後先隻用要被 merge 的 branch 來 commit 一遍,然後再用目前 branch 再 commit 上去。這方式僅適合還沒分享給別人的 local branch,因為等於砍掉重練 commit log。

 合并當然要伴随這各種各樣的問題拉,其中最重要的一個問題就是沖突的問題拉。沖突過後,會提示

<code>Automatic merge failed; fix conflicts and</code><code>then</code> <code>commit the result.</code>

沖突的檔案會更改為下面的樣子,剩下的時間就得看自己去手動解決這裡的沖突了。

<code>&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD</code>

<code>#這裡是現在的代碼</code>

<code>-------------------------</code>

<code>=======</code>

<code>#這裡是拉過來沖突的代碼</code>

<code>++++++++++++++++++++++++</code>

<code>&gt;&gt;&gt;&gt;&gt;&gt;&gt; master</code>

-------------------------------送出-------------------------------------------

-------------------------------------------------------------------------------

git在送出的時候,有時候可能想目前的所有修改,使用指令

<code>#該指令放棄目前 git status 顯示的所有的修改</code>

<code>git reset</code>

<code>#可以讓版本回退到commit編号去</code>

<code>git reset --hard [commit編号]</code>

如果隻放棄某一個檔案的修改,可以使用checkout指令

<code>#但是對于增加的檔案,使用這個指令來放棄修改會有問題,它會提示說找不到檔案,因為修改之前是沒有該檔案的。</code>

git在送出的時候,會忽略一些類型的檔案,這寫配置在 項目的.gitignore 檔案中,可以使用vi編輯這寫内容

<code>vi</code> <code>.gitignore</code>

-----------------------------------------遠端操作--------------------------------------

-----------------------------------------------------------------------------------------

<code>檢出倉庫:$ git clone git://github.com/jquery/jquery.git</code>

<code>檢視遠端倉庫:$ git remote -</code><code>v</code>

<code>添加遠端倉庫:$ git remote add [name] [url]</code>

<code>删除遠端倉庫:$ git remote</code><code>rm</code> <code>[name]</code>

<code>修改遠端倉庫:$ git remote</code><code>set</code><code>-url --push[name][newUrl]</code>

<code>拉取遠端倉庫:$ git pull [remoteName] [localBranchName]</code>

<code>推送遠端倉庫:$ git push [remoteName] [localBranchName]</code>

-----------------------------------比較操作---------------------------------------

在使用Git的過程中,我們有時候需要去對比代碼的不同的地方。這時可以使用 diff 這的指令

<code># 對比commit_id1和commit_id2的不同地方,并用不同顔色差別出來, 注意 commit_id1 一定要比 commit_id2要早送出</code>

<code>git</code><code>diff</code> <code>--color commit_id1 commit_id2</code>

000

--------------儲存目前修改狀态-------------------------

有時候有這樣的情況,目前編輯了一些檔案,這時需要做reset、checkout等其他操作,這時又不想把編輯丢棄,送出了也不完整。這時需要git一個非常人性化的一個指令:git stash ,來儲存目前的狀态。

<code>#儲存目前編輯</code>

<code>git stash</code>

<code>#恢複編輯</code>

<code>git stash apply</code>

git pull 遠端分支

<code>#checkout的同時在本地同步一個遠端origin上的serverbranch分支</code>

<code>git checkout --track origin/serverbranch</code>

繼續閱讀