Android Studio Git 分支實踐

新公司有些項目是用的 Git,以前公司都是 svn,為了練手 Git,我個人 APP 用到了,但是僅簡單的 git pull/push 的使用,並未用到 Git 精髓,只有當項目中用到,才會緊迫去全面學習,所以說,在項目中進步是最快的。

開發場景:遠程有主分支 master,提供用戶使用的正式的穩定的版本;開發分支 dev,用於日常開發。dev 們可以在本地任意創建自己的 Local Branch,然後合併到本地 master 再提交到遠程分支 dev。

命令行實踐

高手都是直接用命令行,用命令行顯得逼格更高。

創建項目

首先我創建 Android 項目 GitBranchSample, Share Project on GitHub。

查看分支

查看本地所有分支:


$ git branch
* master

master 分支前的 * 字符,它表示當前所在的分支。

查看遠程所有分支:


$ git branch -r
origin/master

列出所有本地分支和遠程分支:


$ git branch -a

創建本地 dev1 分支


$ git checkout -b dev1
Switched to a new branch 'dev1'

本地 master 分支默認就是遠程 master 分支,上面命令在此基礎上創建本地 dev1 分支,然後切換到 dev1 分支,相當於以下兩條命令:


$ git branch dev1
$ git checkout dev1

想從遠程分支 dev (遠程有該分支)創建本地分支 dev1:


$ git checkout -b dev1 origin/dev
Switched to a new branch 'dev1'

開發提交

隨便修改 README.md 文件,然後提交:

add 文件


$ git add README.md

commit 信息


$ git commit -m "branch test"
[dev1 8643ecb] branch dev1
2 files changed, 3 insertions(+)

合併到本地 master 分支

分支 dev1 開發工作完成,我們就可以切換回本地 master 分支:


$ git checkout master

Switched to branch 'master'

進行本地分支 dev1 合併:


$ git merge dev1
Updating 82951ea..444bb8e
Fast-forward
README.md | 1 +
1 file changed, 1 insertion(+)

Fast-forward 信息,“快進模式”合併,這種模式下,刪除分支後,會丟掉分支信息,可以用 --no-ff 方式進行 merge :


$ git merge --no-ff -m "merge with no-ff" dev1

如果分支很多,這個分支歷史可能就會變得很複雜了,可以使用 rebase,提交的歷史會保持線性:


$ git rebase dev1

也是進行本地分支 dev1 合併。

刪除本地分支


$ git branch -d dev1

這是刪除,如果沒有完成合並會有提示,以下是強刪:


$ git branch -D dev1
Deleted branch dev1 (was d39f6c3).

創建遠程分支 dev

直接提交


$ git push origin master:dev

這裡冒號可以提交到指定分支,上面命令,把提交本地 master 分支到遠程的 dev 分支,遠程沒有dev這個分支,會創建。


git push origin master

這是本地 master 提交到遠程主分支 master,相當於:


git push origin master:master

跟蹤遠程分支

從遠程分支 checkout 出來的本地分支,稱為 跟蹤分支 (tracking branch)。跟蹤分支是一種和某個遠程分支有直接聯繫的本地分支。在跟蹤分支裡輸入 git pull/push,Git 會自行推斷應該向哪個服務器的哪個分支更新/推送數據。

手動建立追蹤關係:


$ git branch -u origin/dev master
Branch master set up to track remote branch dev from origin.

或者:


$ git branch --set-upstream-to origin/dev master
Branch master set up to track remote branch dev from origin.

指定本地 master 分支追蹤遠程 dev 分支。

查看所有分支跟蹤關係:


$ git branch -vv
* master 444bb8e [origin/dev] branch test

合併遠程分支

我們把遠程分支 dev 合併到 master,怎麼做?

1、指定本地 master 分支追蹤遠程 dev 分支


$ git branch -u origin/dev master
Branch master set up to track remote branch dev from origin.

2、更新內容


$ git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/WuXiaolong/GitBranchSample
0138684..d0ca159 dev -> origin/dev
Updating 0138684..d0ca159
Fast-forward
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

3、開發提交遠程分支 dev

修改了 README.md 文件,然後提交:

add 文件


$ git add README.md

commit 信息


$ git commit -m "merge origin/dev"
[master 44150b4] merge origin/dev

1 file changed, 1 insertion(+), 1 deletion(-)

進行 push


$ git push origin master:dev
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 310 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/WuXiaolong/GitBranchSample.git
d0ca159..44150b4 master -> dev

4、指定本地 master 分支追蹤遠程 master 分支


$ git branch -u origin/master master
Branch master set up to track remote branch master from origin.

5、更新內容


$ git pull
Already up-to-date.

6、同樣提交遠程分支 master

不用 commit ,上面已經 commit 了,也提交給 origin/master,這樣遠程分支 dev 和 master 就是一樣的。


$ git push origin master
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/WuXiaolong/GitBranchSample.git
0138684..44150b4 master -> master

PS:以上遠程分支合併,我不知道是不是正確的方式,望指導。

刪除遠程分支

 

$ git push origin --delete dev

或者


$ git push origin :dev

遠程分支 dev 將被刪除。

Android Studio 實踐

畢竟我們開發工具是 Android Studio,知道 Android Studio 進行分支開發是必要的。

查看當前分支

Android Studio Git 分支實踐

這個分支指的當然是本地的,默認 master。

創建本地 dev1 分支

Android Studio Git 分支實踐

Android Studio Git 分支實踐

以 origin/master 為基礎 checkout 本地分支 dev1。

合併到本地 master 分支

同樣修改 README.md 文件,add,commit,然後切換到 master 分支:

Android Studio Git 分支實踐

然後合併本地分支 dev1:

Android Studio Git 分支實踐

再 push 就 OK 了。

刪除本地分支

如上圖,有個 Delete 按鈕,點擊直接幹掉。

創建遠程分支 dev

直接提交,我們會發現是提交到遠程 master 上,這裡我們可以修改:

Android Studio Git 分支實踐

改成 dev,點擊 Enter,然後 Push,這樣遠程就有了分支 dev。

查看跟蹤遠程分支

如上圖可以查看跟蹤關係,也可以手動修改。

合併遠程分支

修改 README.md 文件,add,commit,分別提交到遠程 dev 和 master 即可,是不是比命令行簡單多了啊。

刪除遠程分支

點擊 origin/dev,直接刪除就好了。

拓展

git fetch

$ git fetch origin master

下載遠程 master 的所有變動到當前分支,與 git pull 區別,沒有與本地合併。

查看當前的遠程庫

顯示對應的克隆地址:

$ git remote -v

-v 為 --verbose 的簡寫,取首字母

修改遠程倉庫地址

服務器要換地址了,本地有 clone 出來的 git 厙,則需要修改一下 origin 的地址,以便能繼續 push 和 pull,項目所在目錄下執行命令行:

git remote set-url origin 新地址

切換分支

我們新建一個分支(Branch1)後,這時如果我們要切換到master分支,我們點擊Local Branches下面的按鈕,然後在其左邊會彈出一個對話框,我們點擊Checkout就可以將其切換到master分支下了。要明白的是Local是存在本地Repo的,你可以直接進行切換。Remote是遠程倉庫的,遠程倉庫的你只能checkout到本地,而不能切換過去。 切換分支,addcommit下,防止代碼丟失。

git push origin dev:master 提交本地 dev 分支推送到遠程master分支

git push origin dev:dev提交本地 dev 分支作為遠程的dev 分支

git push origin :dev剛提交到遠程的 dev 將被刪除,本地還是會保存的

參考

常用 Git 命令清單

Git分支管理策略


分享到:


相關文章: