Git常用方法小結
這三個地址分別支持不同的協議,第一個用於普通用戶checkout,第二個用於在線瀏覽,第三個用戶項目管理員checkin。 申請好項目好,我們需要把那個私鑰保存到你的本地帳號家目錄下的.ssh/id_rsa文件中,並修改該文件的訪問許可權為只有屬主可讀寫。
$ vim ~/.ssh/id_rsa$ chmod 600 ~/.ssh/id_rsa |
2、初始化項目倉庫 上面雖然創建了倉庫,但是倉庫裡頭還沒有內容,我們需要放一些東西上去。要放東西上去蠻簡單,我們先在本地建立一個倉庫,然後把倉庫提交上去即可。
$ cd project //你的項目目錄$ git init && git add . && git commit -a // 初始化本地倉庫並添加項目$ git config --global user.name "Wu Zhangjin" // 初始化你的項目作者信息$ git config --global user.email "wuzhangjin@gmail.com" // 郵件$ git push ssh://git@dev.lemote.com/rt4ls.git master // 把本地倉庫提交到遠程倉庫的master分支中 |
這樣就初始化了遠程倉庫了,將在遠程倉庫看到一個master分支。實際上為了方便起見,上面的最後一步操作往往是這樣。
$ git remote add origin ssh://git@dev.lemote.com/rt4ls.git$ git push origin master |
這兩個是等價的,第一行的意思是添加一個標記,讓origin指向ssh://git@dev.lemote.com/rt4ls.git,也就是說你操作origin的時候,實際上就是在操作ssh://git@dev.lemote.com/rt4ls.git。origin在這裡完全可以理解為後者的別名。 需要說明的是,默認情況下這條語句等價於提交本地的master倉庫到遠程倉庫,並作為遠程的master分支。 如果想把本地的某個分支test提交到遠程倉庫,並作為遠程倉庫的master分支,或者作為另外一個名叫test的分支,那麼可以這麼做。
$ git push origin test:master // 提交本地test分支作為遠程的master分支$ git push origin test:test // 提交本地test分支作為遠程的test分支 |
如果想刪除遠程的分支呢?類似於上面,如果:左邊的分支為空,那麼將刪除:右邊的遠程的分支。
$ git push origin :test // 剛提交到遠程的test將被刪除,但是本地還會保存的,不用擔心 |
3、本地和遠程倉庫的交互 上面實際上已經介紹了本地和遠程的交互操作了,當然,這些交互操作還有兩個需要介紹。介紹完以後我們就介紹本地操作。 首先是clone一個遠程倉庫到本地,例如一個普通用戶想把我的git倉庫clone下來,可以這麼做。
$ git clone git://dev.lemote.com/rt4ls.git |
如果已經clone過我的git倉庫,但是想看看我的倉庫是否已經更新,如果有更新就checkout到本地。
$ git pull |
相應地,如果你想弄到最新的內核,那麼可以clone內核的git倉庫,Linux內核的git倉庫在這裡http://git.kernel.org,比如說我們想checkout最新的內核穩定版,先從http://git.kernel.org找到對應git倉庫的地址:git://git.kernel.org/pub/scm/ + linux/kernel/git/stable/linux-2.6.29.y.git
$ |
4、本地操作 實際上除了上面的本地和遠程的交互操作外,平時的工作主要是一些本地操作了。本地操作無非是一些不停的修改源代碼的工作。 如果沒有問題的話,大概的工作流程是這樣:
$ git add file2 file3$ git commit |
修改過程中可以通過git status查看當前狀態,通過git log查看之前的commits,通過git show顯示某次的commit,通過git diff查看當前還有哪些修改沒有提交。 需要注意地是,當你想刪除或者重命名已經在倉庫中的文件時,請使用git rm和git mv,因為它們除了基本的rm和mv操作外,還會對應地調整倉庫中的記錄。 實際上,在維護某個項目時,往往不會很順利,需要不停地更新,不停地debug,需要多個不同開發人員的協同合作,也涉及到版本之間的回退,補丁的製作和發布等。 下面介紹幾個常用的內容: a. 根據commits產生一序列補丁 例如,我們想導出歷史上的某個commit之後的所有commits為一序列的補丁序列,那麼可以這麼做。
$ git log | grep ^commit | head -5commit a11c7fd5839ddac9a19edadc245522f606a9e067commit a718cbdc3ea9c72e05dd3beb5c58bfac91fe1a76commit b5345a1b077259958fa56cb7c4dea82694214247commit 380f57ad3157b644bb822995dcd85d73504a75d8commit 68a0c4b66d619f816ded5b83f5e8c526e43bdf3e$ git format-patch 68a0c4b66d619f816ded5b83f5e8c526e43bdf3e
$ git am 68a0c4b66d619f816ded5b83f5e8c526e43bdf3e //應用Patch |
b. checkout出某個commit並據此創建一個分支
$ git checkout -b test 68a0c4b66d619f816ded5b83f5e8c526e43bdf3e$ git checkout master // 要刪除某個分支,先checkout到另外一個分支,然後刪除那個分支$ git branch -d test |
c. 從本地機器的其他目錄下pull某個分支例如,我有兩個不同的git倉庫,分別放在兩個不同的目錄下,一個叫linux-mips,一個叫rt4ls,如果我的rt4ls的master想跟 linux-mips的master分支同步,並且我的linux-mips分支已經跟遠程的分支同步了,那我就沒有必要從遠程同步,而是直接從本地的 linux-mips同步,這個怎麼做呢?
$ cd rt4ls$ git checkout master$ git pull /path/to/linux-mips master |
d. 應用另外一個分支的交付(commit)到當前分支如果你的git倉庫裡頭維護了很多分支,你對其中某個分支進行了某個更新,但是這個更新也最好是應用到其他分支上,那怎麼辦呢?一個分支改一次?沒這麼麻煩,我們有git cherry-pick,這個工具可以幫助我們應用某個指定的commit到當前分支。例如:
$ git cherry-pick 0f0b60cff094dfdb313e6a3d197e7907a7626f42 |
0f0b60cff094dfdb313e6a3d197e7907a7626f42是我在另外一個分支裡頭剛追加的一個交付。 e. tag的用法 tag實際上就是一個標籤,如果你發現維護到該項目的某個commit時,這個commit可以當作一個非常重要的「里程碑」,比如這裡開始引入了一個非常重要的功能,那麼你就可以對當前這個commit創建一個tag,這樣當你繼續更新你的項目以後,你就可以非常容易的通過這個tag找到當時實現的這個功能。 例如,你想對當前的commmit創建一個名叫test的tag,那麼可以這麼做。
$ git tag test HEAD |
刪除這個tag可以這麼做。
$ git tag -d test |
如果想把這個tag提交到遠程,可以用git push --tags,如果想刪除遠程tag呢?可以類似刪除遠程分支以後,在冒號(:)右邊加上tag名,左邊保持為空! f. 如果發現某個中間的commit出現了問題,該如何測試它呢 如果你發現一個歷史的commit有問題,並且後續的commit並不需要,所以可以直接回溯到那個commit,進行測試,這個貌似可以通過git bisect來實現,或者是簡單的checkout出某個歷史來測試。 但是,如果你就懷疑某個歷史的commit有問題,但是後面的所有commit你也需要,那麼可以這麼做: 先用git diff或者是format-patch把這個commit弄出一個補丁出來,然後用patch -R把這個補丁臨時撤銷(如果你不commit的話)。這樣就可以方便的測試某個中間的commit是否有問題了!
GIT命令
主題一 基本使用
1:下載git clone ***
2:本地與伺服器端同步git pull
3:本地的狀態查詢git status
4:本地修改同步至伺服器端git commit -a -m 「log_message」 (-a是提交所有改動,-m是加入log信息)
5:本地修改上傳至伺服器端git push主題二 分支
1:git branch查看所有分支
2:git branch branch_0.1 master從主分支master創建branch_0.1分支
3:git branch -m branch_0.1 branch_1.0將branch_0.1重命名為branch_1.0
4:git checkout branch_1.0/master切換到branch_1.0/master分支
小竅門: 3與4的一步實現方式為:git checkout -b branch_1.0 master
5:git rebase branch_1.0(前提假設已git checkout master)在branch_1.0與master分叉處後master的變更append至branch_1.0(較難理解)
6:git branch -d branch_1.0刪除branch_1.0
主題三 更補
1:git commit -C HEAD –amend使用最近commit增補提交,不產生新的commit log
2:git reset –hard HEAD~1將版本庫回復到HEAD之前的版本
推薦閱讀:
※12種【家居招財風水】絕密方法,讓你財源滾滾來
※五香咸雞蛋的腌制方法與營養價值
※注意!這七種情況醫保是不管的!(附詳細使用方法)
※衛生間設計 | 小空間大設計, 29種衛浴間收納方法
※靈性財富/21種喚醒財富的方法
TAG:方法 |