git bash操作命令集合及兩種常見遠端協作方式

常見操作:

# 初始化git倉庫
git init
# 從遠程分支拉去代碼
git clone [url]
# 將文件添加到暫存庫
git add .
# 提交併記錄日誌
git commit -m "commit log"
# 將代碼提交到分支
git push origin [branch]
# 顯示所有分支
git branch -a
# 顯示所有遠程分支
git branch -r
# 列出所有本地分支
git branch 
# 新建分支:使用這個命令新建分支必須要使用master提交一次
git branch [branch name]
# 切換到分支
git checkout [branch name]:
# 新建並切換到分支
git checkout -b [branch name]:
# 將當前url聲明爲origin
git remote add origin [url]
# 顯示所有遠程分支
git  remote -v 
# 顯示日誌
git log --pretty=oneline
# 回退到上一個版本
git reset --hard HEAD^
# 回退兩個版本
git reset --hard HEAD^^
# 回退N個版本
git reset --hard HEAD~N
# 查看所有操作的日誌
git reflog
# 跳轉到指定版本
git reset --hard [7位版本號]
# 將文件回覆爲本地最新版
git checkout -- [filename]
# 將文件從暫存區域撤回
git reset [filename]
# 從工作區刪除及提交撤銷
rm [filename] / 提交 git add [filename] / git commit /撤銷 git reset --hard HEAD[注意 一旦提交刪除,將不能撤回文件]

git的兩種協作方式:

一:從主幹master fork到個人倉庫,然後從個人master中clone到本地,直接在個人master上開發,提交代碼到個人遠程master或相關分支
然後pull request到遠程分支,由特定人員進行merge操作
    這種方式相當於我們把master主幹上的代碼copy一份到個人的倉庫中,然後在個人master的操作都不會影響到原master分支。使用比較簡單
二:第二種方式比較複雜。
    這種方式是直接在遠程master上建立分支,然後進行協同開發。重點介紹一下。
例如:現在有遠程master, production, test分支及其他若干分支zhangsan_v1, lisi_v1, wangwu_v1
    我們開發會先從clone production分支到本地,然後建立自己的本地分支:
    git clone origin production
    git checkout -b self_v1
然後開發,並將修改的文件添加推送到遠程
    git add .
    git commit -m "test" 
    git push origin remote_branch
然後此時注意:我們需要將合併分支的申請提交到test分支,而不是production分支:即在test分支提交pull request,將我們的遠程分支合併
到test。
下面討論衝突的情況:
假設提交到test分支時提示有衝突,那麼該如何解決呢?
我們需要作如下的操作:
    1.將test分支拉取到本地的一個新的test_tmp_v1分支上,並切換到test_tmp_v1上
        注意:這裏千萬不能將test分支的代碼合併到自己本地的self_v1上?【爲什麼?大家可以思考一下】 
    2.修改合併衝突
    3.將代碼提交到遠程的test_remote_tmp分支上,並向test分支提交pull request申請。

爲什麼是這種情況呢?
因爲大多數情況下,我們都不能將自己的代碼直接提交合並申請到生產環境,也就是production分支,而是先要在test分支進行測試,測試通過
之後,纔可以合併到生產分支。
所以通常我們都是以production分支的代碼爲base來開發,而將代碼提交到test分支。
而test分支的代碼並不完整,所以一旦我們將test分支的代碼合併到本地生產分支,並提交,可能會發生不可預知的錯誤。
所以通常這種情況下我們最少都需要兩個本地分支:
一:生產環境的本地本質。local_production
二:測試環境的本地分支 local_test
三:可能有一個合併衝突的臨時分支。local_tmp

第二種方式相對複雜很多,大家有疑問的地方可以在實際工作中多多使用。作者其實也是剛剛瞭解,之前一直在使用fork的方式開發,直到換了
公司之後才發現其中的區別。

其中謬誤之處,請大家斧正。


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