git branch name
eg:
$ git branch testing
複製代碼
git checkout name
eg:
$ git checkout testing
複製代碼
git checkout -b issue20
複製代碼
這裏咱們加上了-b
這個參數,起表明的意思是:
建立一個分支,而且選擇他html
$ git branch issue20
$ git checkout issue20
複製代碼
假設咱們已經把issue20修復完成了,這個時候咱們要把分支修改後的內容合併到master分上面去
git
merge
指令$ git checkout '輸入要回到的分支名稱'
$ git merge '要合併的分支名稱'
eg:
$ git checkout master
$ git merge testing
複製代碼
請注意,合併時出現了「Fast forward」
的提示。因爲當前 master
分支所在的提交對象是要併入的 testing
分支的直接上游,Git
只需把 master
分支指針直接右移。換句話說,若是順着一個分支走下去能夠到達另外一個分支的話,那麼 Git
在合併二者時,只會簡單地把指針右移,由於這種單線的歷史分支不存在任何須要解決的分歧,因此這種合併過程能夠稱爲快進(Fast forward
)。github
合併完成以後,對於咱們修復bug的那個分支已經不須要存在了,就能夠把起刪除掉vim
git branch -d name
eg:
$ git branch -d testing
複製代碼
可是在項目中合併可能不會那麼容易,若是遇到的合併分支的衝突bash
$ git merge issue20
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
複製代碼
如何查看衝突文件?服務器
$ git status
複製代碼
任何包含未解決衝突的文件都會以未合併(unmerged)的狀態列出。Git 會在有衝突的文件里加入標準的衝突解決標記,能夠經過它們來手工定位並解決這些衝突。能夠看到此文件包含相似下面這樣的部分:工具
<<<<<<< HEAD
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
please contact us at support@github.com
</div>
>>>>>>> issue20
複製代碼
能夠看到=======
隔開的上半部分,是 HEAD
(即 master 分支,在運行 merge 命令時所切換到的分支)中的內容,下半部分是在 issue20
分支中的內容。解決衝突的辦法無非是兩者選其一或者由你親自整合到一塊兒。好比你能夠經過把這段內容替換爲下面這樣來解決:學習
<div id="footer">
please contact us at email.support@github.com
</div>
複製代碼
這個解決方案各採納了兩個分支中的一部份內容,並且我還刪除了 <<<<<<<,======= 和 >>>>>>> 這些行
。在解決了全部文件裏的全部衝突後,運行 git add 將把它們標記爲已解決狀態
(譯註:實際上就是來一次快照保存到暫存區域。)。由於一旦暫存,就表示衝突已經解決。若是你想用一個有圖形界面的工具來解決這些問題,不妨運行 git mergetool,它會調用一個可視化的合併工具並引導你解決全部衝突:測試
$ git mergetool
This message is displayed because 'merge.tool' is not configured.
See 'git mergetool --tool-help' or 'git help config' for more details.
'git mergetool' will now attempt to use one of the following tools:
opendiff kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff diffuse diffmerge ecmerge p4merge araxis bc3 codecompare vimdiff emerge
Merging:
index.html
Normal merge conflict for 'index.html':
{local}: modified file
{remote}: modified file
Hit return to start merge resolution tool (opendiff):
複製代碼
若是不想用默認的合併工具(Git 爲我默認選擇了 opendiff,由於我在 Mac 上運行了該命令),你能夠在上方"merge tool candidates"裏找到可用的合併工具列表,輸入你想用的工具名。咱們將在第七章討論怎樣改變環境中的默認值。fetch
退出合併工具之後,Git 會詢問你合併是否成功。若是回答是,它會爲你把相關文件暫存起來,以代表狀態爲已解決。
再運行一次 git status 來確認全部衝突都已解決:
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: index.html
複製代碼
若是以爲滿意了,而且確認全部衝突都已解決,也就是進入了暫存區,就能夠用git commit
來完成此次合併提交。提交的記錄差很少是這樣:
Merge branch 'issue20'
Conflicts:
index.html
#
# It looks like you may be committing a merge.
# If this is not correct, please remove the file
# .git/MERGE_HEAD
# and try again.
#
複製代碼
若是想給未來看此次合併的人一些方便,能夠修改該信息,提供更多合併細節。
好比你都做了哪些改動,以及這麼作的緣由。有時候裁決衝突的理由並不直接或明顯,有必要略加註解。
$ git branch
複製代碼
*
號的表示當前選中的分支
$ git branch -v
複製代碼
已合併,一般咱們爲了處理某個問題而開的分支,在合併以後就能夠刪除了
eg:
$ git branch --merged
複製代碼
未合併,若是刪除未合併的分支會報錯,由於那樣子會數據丟失,可是若是你執意刪除可使用-D
來進行刪除
eg:
$ git branch --no-merged
複製代碼
當咱們須要協同開發的時候,咱們一般會一個發佈通道,一個測試通道以及一個正在開發的通道。
發佈通道中咱們會把測試ok的代碼合併到裏面去,而後咱們新編寫的功能開發完成就會加入測試分支。
相似於下面這樣子,做者本身畫的,有點醜……見諒
eg:
$ git branch haha
eg:
$ git push origin haha
複製代碼
git checkout --track origin/testbranch
複製代碼
若是你從服務器上面下拉分支的時候出現了fatal: 'origin/testbranch' is not a commit and a branch 'testbranch' cannot be created from it
這種錯誤,那麼就可使用
git fetch origin 來同步遠程服務器上的數據到本地
而後在下拉一次
$ git checkout --track origin/testbranch
Branch testbranch set up to track remote branch testbranch from origin.
Switched to a new branch 'testbranch'
複製代碼
看到Switched to a new branch 'xxx'
這樣子的字樣就說明成功了
git push origin 分支名稱
git push origin haha
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 260 bytes | 260.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
...
複製代碼
git push origin :分支名稱
git push origin :haha
remote: Powered by Gitee.com
To gitee.com:codepgq/EIQ-Smart.git
- [deleted] haha
複製代碼
假設如今有兩個分支:jack、smith,
而後在jack中新建了兩個文件(a.c 和 b.c)
這個時候想把b.c合併到smith中
這裏若是你沒提交有可能會丟失數據
git add .
git commit -m "xxxxx"
複製代碼
git checkout simith
複製代碼
git checkout 分支名 文件路徑
git checkout jack b.c
這裏須要注意,由於b.c就在根文件,因此不須要路徑只須要文件名,
可是若是你的文件在子文件夾內,就須要把文件路徑也導入進來
複製代碼
如何切換Git的源(當我的項目轉移到公司帳號下或者修改了項目名稱)
碼雲
git remote set-url origin [git@gitee.com](mailto:git@gitee.com):地址.git
github
git remote set-url origin [git@github.com](mailto:git@github.com):地址.git複製代碼
做爲一個開發者,有一個學習的氛圍和一個交流圈子特別重要,這是個人交流羣761407670(111),你們有興趣能夠進羣裏一塊兒交流學習