Git相關知識(分支管理、主要命令和衝突解決)

git的分支管理

比起同類軟件,Git其中很顯著的一點,就是版本的分支(branch)和合並(merge)十分方便。有些傳統的版本管理軟件,分支操作實際上會生成一份現有代碼的物理拷貝,而Git只生成一個指向當前版本(又稱”快照”)的指針,因此非常快捷易用。
分支管理中常用的分支有三種:master、develop、臨時性分支(feature(功能分支),release(預發佈分支)、fixbug(bug修復)),主要分支是前兩種,fixbug分支主要應用於對一些特定目的的版本開發,使用完之後,merge到主要分支中然後立即刪除。

`git checkout master
 git merge --no-ff dev
 # 對合並生成的新節點,做一個標籤
 git tag -a 1.2`

其中--no-ff會執行正常合併,在Master分支上生成一個新節點。默認情況下,不是用這個參數,Git執行”快進式合併”(fast-farward merge),會直接將Master分支指向Develop分支。
這裏寫圖片描述這裏寫圖片描述

臨時性分支

1,功能分支(feature)
功能分支,它是爲了開發某種特定功能,從Develop分支上面分出來的。開發完成後,要再併入Develop。
2.預發佈分支(release)
預發佈分支,它是指發佈正式版本之前(即合併到Master分支之前),我們可能需要有一個預發佈的版本進行測試。預發佈分支是從Develop分支上面分出來的,預發佈結束以後,必須合併進Develop和Master分支。
3,修改分支(fixbug)
修補bug分支。軟件正式發佈以後,難免會出現bug。這時就需要創建一個分支,進行bug修補。修補bug分支是從Master分支上面分出來的。修補結束以後,再合併進Master和Develop分支。
這裏寫圖片描述這裏寫圖片描述這裏寫圖片描述

參考資料:http://www.ruanyifeng.com/blog/2012/07/git.html

git命令

git branch

  沒有參數,顯示本地版本庫中所有的本地分支名稱。
  當前檢出分支的前面會有星號。

 git branch newname

  在當前檢出分支上新建分支,名叫newname。

git checkout newname

  檢出分支,即切換到名叫newname的分支。

git checkout –b newname master

  這個命令將上面兩個命令合併:在master分支上創建分支newname分支並檢出到該分支。
2.壓合合並(squashed commits):
  將一條分支上的若干個提交條目壓合成一個提交條目,提交到另一條分支的末梢。
  把dev分支上的所有提交壓合成主分支上的一個提交,即壓合提交:

  git checkout master
  git merge --squash dev

  此時,dev上的所有提交已經合併到當前工作區並暫存,但還沒有作爲一個提交,可以像其他提交一樣,把這個改動提交到版本庫中:

  git commit –m “something from dev”

3.揀選合併(cherry-picking):

  揀選另一條分支上的某個提交條目的改動帶到當前分支上。
  每一次提交都會產生一個全局唯一的提交名稱,利用這個名稱就可以進行揀選提交。
  比如在dev上的某個提交叫:321d76f

  git checkout master
  git cherry-pick 321d76f 

   選多個提交,可以給git cherry-pick命令傳遞-n選項,比如:

git cherry-pick –n 321d76f

  這樣在揀選了這個改動之後,進行暫存而不立即提交,接着可以進行下一個揀選操作,一旦揀選完需要的各個提交,就可以一併提交。

衝突處理

對於簡單的合併,手工編輯,然後去掉這些標記,最後像往常的提交一樣先add再commit即可。

刪除一個分支

刪除dev2:

  git branch –d dev2

  注意不能刪除當前所在分支,需要轉到別的分支上。

  如果要刪除的分支已經成功合併到當前分支,刪除分支的操作會直接成功。

  如果要刪除的分支沒有合併到當前所在分支,則會出現提示,如果確定無須合併而要直接刪除,則執行命令:

  git branch –D dev2

  進行強刪。

重命名分支:

  git branch –m oldname newname

  -m不會覆蓋已有分支名稱,即如果名爲newname的分支已經存在,則會提示已經存在了。

  如果改成-M就可以覆蓋已有分支名稱了,即會強制覆蓋名爲newname的分支,這種操作要謹慎。

以下方法適用於:撤銷最後一次提交的情況
步驟如下:
步驟1、使用 ”Git log“ 命令 找到 想要撤銷的操作之前的一次提交的commit id ;
比如:使用 git log命令如下結果
commit-id1
commit-id2
commit-id3
如果想要撤銷commit_id1的話,那麼我們就要選擇commit-id2

步驟2、使用如下兩個命令撤銷提交:
git reset –har d commit-id2
git push originEAD –force

$ git log -3

commit 40e8c12abff40aba66d8fa6ed4970a93890d755a

feature 2.2

commit f0aac7525f6cb0be069662b0b3c52e8edf411a62

feature 2.1

commit 5ec3455dae0c02537c2d9ff1e001b5da97e71d9a

function 1

使用git reset –soft,撤銷最近的兩次commit操作

gitresetsoft5ec3455dae0c02537c2d9ff1e001b5da97e71d9a git status
$git reset –hard 撤銷本地文件、statge、local repo的修改

git reset –hard
git push origin HEAD –force

$ git  reset --soft 5ec3455dae0c02537c2d9ff1e001b5da97e71d9a
$ git  status
$git  reset –hard 撤銷本地文件、statge、local repo的修改

git reset --hard <commit_id>
git push origin HEAD --force

參考:http://www.cnblogs.com/mengdd/p/3585038.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章