Git 在保存和對待各種信息的時候與其它版本控制系統有很大差異,盡管操作起來的命令形式非常相近。Git有以下特點:
Git 和其它版本控制系統(包括 Subversion 和近似工具)的主要差別在于 Git 對待數據的方法。 概念上來區分,其它大部分系統以文件變更列表的方式存儲信息。 這類系統(CVS、Subversion、Perforce、Bazaar 等等)將它們保存的信息看作是一組基本文件和每個文件隨時間逐步累積的差異。
Git 不按照以上方式對待或保存數據。 反之,Git 更像是把數據看作是對小型文件系統的一組快照。 每次你提交更新,或在 Git 中保存項目狀態時,它主要對當時的全部文件制作一個快照并保存這個快照的索引。 為了高效,如果文件沒有修改,Git 不再重新存儲該文件,而是只保留一個鏈接指向之前存儲的文件。 Git 對待數據更像是一個快照流。
這是 Git 與幾乎所有其它版本控制系統的重要區別。 因此 Git 重新考慮了以前每一代版本控制系統延續下來的諸多方面。 Git 更像是一個小型的文件系統,提供了許多以此為基礎構建的超強工具,而不只是一個簡單的 VCS。
在 Git 中的絕大多數操作都只需要訪問本地文件和資源,一般不需要來自網絡上其它計算機的信息。 如果你習慣于所有操作都有網絡延時開銷的集中式版本控制系統,Git 在這方面會讓你感到速度之神賜給了 Git 超凡的能量。 因為你在本地磁盤上就有項目的完整歷史,所以大部分操作看起來瞬間完成。
Git 中所有數據在存儲前都計算校驗和,然后以校驗和來引用。 這意味著不可能在 Git 不知情時更改任何文件內容或目錄內容。 這個功能建構在 Git 底層,是構成 Git 哲學不可或缺的部分。 若你在傳送過程中丟失信息或損壞文件,Git 就能發現。
你執行的 Git 操作,幾乎只往 Git 數據庫中增加數據。 很難讓 Git 執行任何不可逆操作,或者讓它以任何方式清除數據。 同別的 VCS 一樣,未提交更新時有可能丟失或弄亂修改的內容;但是一旦你提交快照到 Git 中,就難以再丟失數據,特別是如果你定期的推送數據庫到其它倉庫的話。
五、三種狀態
?Git 有三種狀態,你的文件可能處于其中之一:已提交(committed)、已修改(modified)和已暫存(staged)。 已提交表示數據已經安全的保存在本地數據庫中。 已修改表示修改了文件,但還沒保存到數據庫中。 已暫存表示對一個已修改文件的當前版本做了標記,使之包含在下次提交的快照中。
簡單內容沖突處理
當兩條分支對同一個文件的同一個文本塊進行了不同的修改,并試圖合并時,Git不能自動合并的,稱之為沖突(conflict)。解決沖突需要人工處理。
比如當前在master分支,想把dev分支merge過來,結果產生了一個沖突,打開文件內容可以看到這么一個沖突:
<<<<<<< HEAD
test in master
=======
test in dev
>>>>>>> dev
<<<<<<<標記沖突開始,后面跟的是當前分支中的內容。
HEAD指向當前分支末梢的提交。
=======之后,>>>>>>>之前是要merge過來的另一條分支上的代碼。
>>>>>>>之后的dev是該分支的名字。
對于簡單的合并,手工編輯,然后去掉這些標記,最后像往常的提交一樣先add再commit即可。
Git常用指令
git add README添加文件
git add [file name] 添加一個文件到git index
git branch 查看本地所有分支
git branch -a 查看所有的分支
git branch -r 查看遠程所有分支
git branch 刪除遠程branch
git branch -D master develop 刪除本地庫develop
git branch branch_0.1 master 從主分支master創建branch_0.1分支
git branch -m branch_0.1 branch_1.0 將branch_0.1重命名為branch_1.0
git commit -a 提交當前repos的所有的改變
git commit -v 當你用-v參數的時候可以看commit的差異
git commit -m "This is the message describing the commit" 添加commit信息
git commit -a -a是代表add,把所有的change加到git index里然后再commit
git commit -a -v 一般提交命令
git commit 提交
git clone git://github.com/schacon/grit.git 從服務器上將代碼給拉下來
git checkout --track origin/dev 切換到遠程dev分支
git checkout dev 切換到本地dev分支
git checkout -b dev 建立一個新的本地分支dev
git commit -m "init" 提交并且加注釋
git commit -m "remove" 移除文件(從Git中刪除)
git commit -a -m "log_message" (-a是提交所有改動,-m是加入log信息) 本地修改同步至服務器端 :
git checkout branch_1.0/master 切換到branch_1.0/master分支
git config --list 看所有用戶
git diff 查看尚未暫存的更新
git diff --cached 或 $ git diff --staged 查看尚未提交的更新
git fetch 相當于是從遠程獲取最新版本到本地,不會自動merge
git init本地初始化
git ls-files 看已經被提交的
git log 看你commit的日志
git merge origin/dev 將分支dev與當前分支進行合并
git pull 本地與服務器端同步
git push origin master將文件給推到服務器上
git push (遠程倉庫名) (分支名) 將本地分支推送到服務器上去。
git push origin master:hb-dev將本地庫與服務器上的庫進行關聯
git remote show origin 顯示遠程庫origin里的資源
git remote show 查看遠程庫
git rm 文件名(包括路徑) 從git中刪除指定文件
git rm [file name] 刪除一個文件
git rm a.a 移除文件(從暫存區和工作區中刪除)
git rm --cached a.a 移除文件(只從暫存區中刪除)
git rm -f a.a 強行移除修改后文件(從暫存區和工作區中刪除)
git remote add origin git@github.com:daixu/WebApp.git增加一個遠程服務器端
git stash push 將文件給push到一個臨時空間中
git stash pop 將文件從臨時空間pop下來