merge與rebase
1.一個新功能需求開發產生一個新的feature分支feature-some
git checkout -b feature-some develop
複製程式碼
2.feature-some完成開發及測試
git add somefiles
git commit -m "message"
複製程式碼
3.需要合併到develop分支-git merge
git checkout develop
git merge feature-some
git resolved conflicts
git add modfiy
git commit -m "message"
git push origin develop
複製程式碼
這時使用git log會看到明顯的git merge資訊,並不是自己寫的message
如果讓分支歷史看起來像沒有經過任何合併一樣,你也許可以用 git rebase
4.需要合併到develop分支(如果develop分支是共享的,最好不要這樣做)
git checkout develop
git rebase feature-some
//解決衝突後
git add .
git rebase--continue
git push
複製程式碼
在任何時候,你可以用--abort引數來終止rebase的行動,並且"mywork" 分支會回到rebase開始前的狀態。
git rebase--abort
複製程式碼
5.更常用的是將develop分支的最新內容引入到正在開發的feature中 最好是在feature分支push前進行操作,可減少衝突
git checkout feature
git rebase develop
//解決衝突後
git add .
git rebase--continue
git push
複製程式碼
附:常用命令:
* git diff
HEAD commit版本
Index staged版本
a、檢視尚未暫存的檔案更新了哪些部分,不加引數直接輸入
git diff
此命令比較的是工作目錄(Working tree)和暫存區域快照(index)之間的差異
也就是修改之後還沒有暫存起來的變化內容。
b、檢視已經暫存起來的檔案(staged)和上次提交時的快照之間(HEAD)的差異
git diff --cached
git diff --staged
顯示的是下一次commit時會提交到HEAD的內容(不帶-a情況下)
c、顯示工作版本(Working tree)和HEAD的差別
git diff HEAD
d、檢視當前目錄和另外一個分支的差別
git diff test
複製程式碼
git checkout
恢復某個已修改的檔案(撤銷未提交的修改):
$ git checkout file-name
例如:git checkout src/com/android/.../xxx.java
比如修改的都是java檔案,不必一個個撤銷,可以使用
$ git checkout *.java
撤銷所有修改
$ git checkout .
複製程式碼
git cat-file
git cat-file -t,檢視Git物件的型別,主要的git物件包括tree,commit,parent,和blob等。
git cat-file -p,檢視Git物件的內容
複製程式碼
1.改完bug忘記切換分支了,程式碼改了很多怎麼辦。
git add . (把所有改動暫存)
git stash (把暫存的檔案提交到git的暫存棧)
git checkout 本該提交程式碼的分支
git stash pop (將暫存棧中的程式碼放出來)
2.程式碼不但改了,還提交了怎麼辦。
git checkout 錯誤分支
git reset HEAD~1 (最近一次提交放回暫存區, 並取消此次提交)
git stash (把暫存的檔案提交到git的暫存棧)
git checkout 正確分支
git stash pop (把git暫存棧的檔案取出)
git push origin 錯誤的分支 -f (把不該上去的檔案回退掉)
複製程式碼
分支切換和增刪
- 檢視遠端分支
git branch -r
origin/master
複製程式碼
回到頂部 2. 檢視本地分支
git branch
*master
注:以*開頭指明現在所在的本地分支
複製程式碼
回到頂部 3. 檢視本地分支和遠端分支
git branch -a
*master
remotes/origin/master
複製程式碼
回到頂部 4. 建立分支
*新建一個分支,但依然停留在當前分支
git branch [branch-name]
*新建一個分支,並切換到該分支上
git branch -b [branch-name]
複製程式碼
4-1 建立本地分支
$ git branch test_1
$ git branch -a
*master
test_1
remotes/origin/master
注:建立本地分支時,預設是把所在的本地分支的東西拷貝給新建本地的分支。
複製程式碼
4-2 把本地分支推送到遠端作為遠端分支
$ git push origin test_1
To git@******
* [new branch] test_1 -> test_1
$ git branch -a
*master
test_1
remotes/origin/master
remotes/origin/test_1
複製程式碼
注:git push origin test_1會把本地的test_1分支推送到遠端,本地test_1分支和遠端的對應關係是test_1-->test_1 如果本地根本沒有分支test_9,推送的話會提示錯誤 回到頂部 5. 切換到分支
$ git checkout test_1
Switched to branch 'test_1'
複製程式碼
回到頂部 6. 刪除本地分支
$ git branch -a
master
test_1
test_2
remotes/origin/master
remotes/origin/test_1
remotes/origin/test_2
$ git branch -d test_2
Deleted branch test_2 (was c470057).
$git branch -a
master
test_1
remotes/origin/master
remotes/origin/test_1
remotes/origin/test_2
複製程式碼
可以看到本地分支test_2刪除了 回到頂部 7. 刪除遠端分支
$ git branch -a
*master
test_1
remotes/origin/master
remotes/origin/test_1
remotes/origin/test_2
$ git push origin :test_2
To git@*********- [deleted] test_2
$ git branch -a
*master
test_1
remotes/origin/master
remotes/origin/test_1
複製程式碼
注:git push origin :*** 就是刪除遠端分支的意思,和剛才我刪除本地無關。如下面,我留著本地test_1分支,只是刪除了遠端的分支test_1
$ git push origin :test_1
To git@********
- [deleted] test_1
$ git branch -a
*master
test_1
remotes/origin/master
複製程式碼
遠端分支已經刪除,但本地仍然顯示,則修剪一下
git remote prune origin
複製程式碼