1. 程式人生 > 其它 >Git學習——遠端倉庫

Git學習——遠端倉庫

先有本地庫,後有遠端庫,關聯遠端庫

關聯一個遠端庫:git remote add origin git@server-name:path/repo-name.git

如:git remote add origin [email protected]:maotingzi/learngit.git

把本地庫的內容推送到遠端:git push:git push -u origin master:實際是把當前分支master推送到遠端

(由於遠端庫是空的,我們第一次推送master分支時,加上了-u引數,Git不但會把本地的master分支內容推送的遠端新的master分支,還會把本地的master分支和遠端的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令。)

刪除(解除本地和遠端的繫結關係)遠端庫:git remote rm <name>

先用git remote -v檢視遠端庫資訊,再使用git remote rm <name>

先有遠端庫,後有本地庫

建立一個新的遠端庫,用git clone命令克隆一個本地庫

如:git clone [email protected]:maotingzi/learngit_1.git

建立與合併分支

檢視檔案:cat <file name>

建立新分支且切換到新分支(新分支:newbranch):git checkout -b newbranch/git switch -c dev

檢視當前分支:git branch(會列出所有的分支,當前分支有個*號)

切換另一分支:git checkout 分支名/git switch 分支名

把newbranch分支的工作成果合併到master分支上:git merge newbranch

合併成功後,刪除newbranch分支:git branch -d newbranch

刪除後,檢視分支:git branch

解決衝突

當一個分支上提交了修改後的檔案,切換到master分支後,Git就自動提示我們當前master分支比遠端的master分支要超前1個提交,此時提交一個修改的檔案,git就無法快速合併,合併時就會發生衝突,就需要手動解決衝突,將兩個檔案修改的內容合併到一起,git會標記出不同分支的內容,我們修改後進行提交。用帶引數的git log也可以看到分支的合併情況。

(git log --graph),最後刪除分支(git branch -d <分支名>)

分支管理策略

在合併分支時,git會用Fast forward模式,但是在這種模式下,刪除分支後,會丟掉分支資訊;若要強制禁用該模式,在合併分支時加上--no-ff,即git merge --no-ff -m "desc" <分支名>:合併時建立一個新的commit,所以加上-m引數,把描述寫進去,合併後,用git log檢視分支歷史。

bug分支

1.修復bug時,建立一個分支 進行修復

2.正在dev分支上進行工作還沒有提交時,要先bug修復,此時用git stash命令把當前的工作儲藏起來,bug修復後,用檢視工作現場存在位置:git stash list,恢復工作活動,有兩種方法:

一是用git stash pop恢復到當前繼續工作,恢復的同時把stash內容也刪了,再用git stash list檢視,就看不到任何stash內容了;

二是用git stash apply恢復,但是恢復後,stash內容並不刪除,需要用git stash drop來刪除。

3.在master分支上修復的bug,想要合併到當前dev分支,可以用git cherry-pick <commit> 命令,把bug提交的修改“複製”到當前分支,避免重複勞動。

feature分支

每新增一個新的功能,就新建一個feature分支:git switch -c <分支名>,開發一半時,需要刪除此分支,但是刪除失敗,git會提醒:還沒有被合併,如果刪除,將失掉修改,若要強制性刪除,需要大寫的-D引數,即:git branch -D <name>

(要丟棄一個沒有被合併過的分支,可以通過git branch -D <name>強行刪除。)

多人協作(遠端倉庫的預設名稱是origin)

檢視遠端倉庫的資訊:git remote(顯示更詳細的資訊:git remote -v)

推送分支:把該分支上的所有本地提交推送到遠端庫,在推送的時候,要指定本地分支,即:git push origin <branch name>

抓取分支:先試圖推送自己的修改,若推送失敗,則因為遠端分支比你的本地更新,需要先用git pull試圖合併;如果合併有衝突,則解決衝突,並在本地提交;沒有衝突或者解決掉衝突後,再用git push origin <branch-name>推送就能成功!

如果git pull提示no tracking information,則說明本地分支和遠端分支的連結關係沒有建立,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。

Rebase(變基)

rebase操作可以把本地未push的分叉提交歷史整理成直線;

rebase的目的是使得我們在檢視歷史提交的變化時更容易,因為分叉的提交需要三方對比。