git 隨想

1 所有內容都在本地
便宜快速的本地分支
因爲是本地的所以是分散的
2 git 很省空間
git 很快
3 緩衝區功能
4 github


git flow


一些版本控制系統把工作目錄稱爲工作拷貝。git新手經常會混淆git中的版本庫和工作目錄樹。因爲在subversion等傳統的版本控制工具中,工作目錄在本地,版本庫在服務器上,而git中並非如此

在git中,版本庫不在服務器上,而存儲在本地工作目錄的".git"目錄中。這意味着,要想知道歷史信息,只和本地的版本庫打交道即可,無須與服務器上的版本庫通信

具體來說,把遠程版本庫裏的改動拿到本地版本庫中,需要兩部操作。第一步,把改動取來(Fetch),把遠程版本庫中的版本和分支複製到本地的遠程版本庫中。第二步,在本地,把本地的遠程版本庫裏取來的改動與自己本地的改動合併。git工具包提供了這樣的合併工具。一般來說,取來操作和合並操作總是先後執行。因此,在git中可以用一個命令來完成這兩部操作:拖入(Pull)。

git help command

windows下的git

Cygwin

MSys版的git
可能與*nix版不兼容


Git需要用戶提供若干信息。通過命令git config,用戶可以把此類信息提供給本地版本庫


用戶名和郵箱是必須的

git config --global user.name ""
git config --global user.email ""

git 可設置的值超過130個。其中大多數都很少用到。但有一個例外:關於用不同顏色顯示git命令輸出

若想在命令行窗口使用不同的顏色顯示不同類型的內容,請將"color.ui"的值設爲auto或always

.git/config


git圖形界面

gitk
添加 --all 參數,可以顯示全部分支的歷史


git中有三個地方可以存放代碼。第一個地方是工作目錄樹
第二個是索引,也就是暫存區。暫存區是工作目錄樹和版本庫的緩衝區。存放着準備提交到版本庫中的修改

第三個也就是最後一個,是版本庫


使用命令git commit時,可以接受多個 -m 參數


精心寫出完美的提交留言是一種藝術。這可以通過查看其他成功項目的提交日誌來學習。
在每一個提交上花費一兩分鐘,總結這些修改,就像給坐在旁邊的開發人員解釋一樣。首先用一句簡單的話來概括此提交;然後用幾句話全面解釋

對於比較複雜的提交留言,需要用編輯器來輸入。爲啓動編輯器,git會按照以下順序查找編輯器的設置:

1 環境變量 GIT_EDITOR
2 git的設置 core.editor
3 環境變量 VISUAL
4 環境變量 EDITOR
5 vi

git log --pretty=oneline

git archive --format=tar \
--prefix=mysite-1.0/ 1.0 \
| gzip > mysite-1.0.tar.gz

git add -i
git add -p
git add .

也即是說,當在工作目錄樹中修改了一個文件後,可以先暫存此修改,之後再次修改該文件,然後可以提交剛纔已經暫存的修改,而再次修改的內容沒有提交,仍然在工作樹中


git不會單獨記錄和追蹤目錄。有一個解決方案:在想要跟蹤的目錄裏添加一個空文件,文件名通常是"."開頭

另一種提交方式是:給git commit傳遞 -a參數,git會把工作目錄樹中所有的改動提交到版本庫中,否則,只有已納入git版本控制的文件的修改被提交

git commit -m "cool" some-file

-C 告訴git複用指定提交的提交留言,而不是從頭再寫一個


git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.br branch


git diff 工作目錄樹 暫存區
git diff --cached 暫存去 版本庫
git diff HEAD 工作目錄樹 版本庫

git mv 來重命名


.gitignore .git/info/exclude /usr/share/git-core/templates/info/exclude

問自己一個簡單的問題:每個人的版本庫中都需要這類忽略嗎?所以把個人偏好的作爲版本庫的一部分發布出去並不是一個好想法


git checkout -b

直接合並
壓縮合並 git merge --squash
揀選合併 git cherry-pick 321d76f
要揀選多個提交,傳遞參數 -n

不一定使用 -m參數。編輯器會使用剛剛揀選的提交的提交留言(在解決合併衝突時也如此)

git branch -d -D -m -M
git stash


git log -10

git log 7b1558c
注意,上面的例子使用的是提交名稱縮寫,不論輸入幾位,git都會設法匹配

git log 11111.22222
git log 111..

^^
~1

git diff 指定版本範圍與git log一樣
git diff --stat


當推入變更之後又去修改歷史,並且隨後又推入不同的變更,則會給那些已經拿到了之前的變更的同事帶來很大麻煩

git revert 此命令通過在版本庫中創建一個反向的新提交來抵消原有的提交
-n
--no-edit


復位

git reset

重寫歷史
重新排序提交
多個提交壓和成一個提交
將一個提交分解爲多個提交

git filter-branch --tree-filter 'rm -f passwords.txt' HEAD
你可以觀察到 Git 重寫目錄樹並且提交,然後將分支指針移到末尾。一個比較好的辦法是在一個測試分支上做這些然後在你確定產物真的是你所要的之後,再 hard-reset 你的主分支。要在你所有的分支上運行filter-branch的話,你可以傳遞一個--all給命令。


git tag
git push --tags

通過git子模塊來跟蹤外部版本庫

git stash
臨時將代碼存檔


懸空對象

git gc
--aggressive


git fsck
git reflog

git branch -D 刪除一個實驗分支時,git會暫時保留該分支的內容

如果你決定恢復那部分歷史,你可以創建一個新的引用指向它,例如創建一個新的分支

gc.reflogExpireUnreachable
gc.reflogExpire

當我們在執行git gc命令時,它會調用git prune命令把這些懸空對象(dangling objects)清除掉(prune);一般默認是清除超過二週的懸空對象。如果我們不要等二週時間,可在git 中設置一個環境變量gc.pruneExpire;也可在執行命令時設置清除(prune)的時間長度(expire date)。

撤底刪除指令

git reflog expire --expire-unreachable=0 --all
git gc --prune=0


http://liuhui998.com/
http://progit.org/book/zh/
git 中文手冊


git svn
http://www.robinlu.com/blog/archives/194

git flow
http://ihower.tw/blog/page/2
http://agilejava.blogbus.com/logs/103552611.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章