問題驅動的Git學習

2022-09-17 11:48:13 字數 2182 閱讀 8173

(搬運自我在segmentfault的部落格)

本人是個git新手,平時用git最多的就是push,因為別的都不怎麼會用。這幾天因為在小組中負責**的整合,順便將**提交到github,接觸到了git更多的用法。

第乙個問題比較簡單,其實是關於github的問題。就是我平時用git的機器是自己的電腦,金鑰也是存在本機上並把上傳到github上。那麼我在機房的機器上難道要複製乙份私鑰過來?既不優雅也不安全。(網上還真有人這麼幹。)其實github這類**是可以儲存多份公鑰的,不信自己到edit profile->ssh keys去看看。這是也明白為什麼git的windows gui版為什麼不用設定金鑰了。順便記一下生成金鑰的過程備忘。

cd ~/.ssh

ssh-keygen -t rsa -c "[email protected]"

此時~/.ssh/id_rsa.pub就是你的公鑰。

第二個問題稍微複雜一點,是關於在多台機器提交**導致的問題。因為我會在我自己的電腦和機房電腦修改**,難免造成**的不一致。這時如果push**可能會出錯,原因可能是本地**在版本樹中的位置更早,或者多處獨立提交了**導致衝突。通常此時應當先將**拉取下來解決衝突。

git fetch origin
執行完這一句後,我們會把執行git branch -r看到的遠端分支都fetch下來。下面執行merge。

git merge origin/a-branch
這樣會將遠端repo中名叫a-branch的分支合併到本地的當前分支,預設就是master。關於分支的問題會在第三個問題再說。

如果merge之後自動解決了衝突最好,沒有的話就略麻煩。git會將所有有衝突的檔案顯示在終端裡。如下圖所示。

我們開啟有衝突的檔案,會看到類似下面這樣的標識。

其中橫線前的部分表示本地分支的內容,橫線後則表示origin/master中的內容。

根據git的提示,我們需要手動消除衝突。而不管我們改成什麼樣,git並不關心,哪怕我們什麼也不改也可以。注意此時我們用git status檢視發現,衝突的檔案被標記為了unmerged paths.

手動消除衝突後,我們就可以將這些檔案加到暫存區。之後就可以隨意commit和push了。

不過也有時候,git會自動進行fast forward merge

如果merge的結果不是我們想要的怎麼辦?

git reset --hard
那麼,如果我們本地的分支是領先於遠端分支,那麼merge會怎麼樣?請看圖。

至於merge和rebase的區別,stackoverflow上已經說的很好了。假設這是目前的狀態:

c---d---e local

/a---b---f---g remote

merge之後是這樣:

c---d---e local

/ \

a---b---f---g---h remote

而rebase之後是這樣:

c'--d'--e' local

/a---b---f---g remote

當然,他們的效果自然是一樣的。

下面就是第三個問題了,關於git中的分支。對於git中的這一功能,之前一直沒有去仔細研究,直到今天我們組就專案的某一實現產生了分歧,組長讓我建立乙個分支進行試驗。假定我在本地建立出乙個名叫test的分支:

git branch test
切換到test分支:

git checkout test
刪除test分支:

git branch -d test
使用分支的乙個好處自然就是**可能在多個方向同時進行而不會相互干擾。當你切換到乙個分支時,**就會自動更換成對應分支的內容。而這一切都可以交給git,而不需要自己手工備份**。

轉Git學習碰到的問題

1 通過 windows 下的 gitbash 連線 github 時 ssh keygen t rsa c abcd efgh.com 你的郵箱然後將 key 貼上到 github 設定裡的 ssh keys 報出如下錯誤 key is invalid.it must begin with ssh...

學習git使用遇到的問題

開始我將專案上傳到github上的,第乙個問題是我的 ieda 沒有gitee 的外掛程式,讓我一度認為 version control 中git 就是gitee 外掛程式,我說 git差勁和 github idea gitee 的外掛程式。我開始是將專案上傳到github上的,所以在本地留下了的記...

LCD驅動的問題

最近遇到lcd驅動的問題,lcd可以點亮,但是畫影象的時候螢幕上只顯示各種顏色垂直的線條,不知 出了問題,不知哪位高手可以指點一下!我用的是mtk6205 st7367的dirver ic,init成功,但是畫圖就有問題了,畫全黑的過去居然顯示成彩色的條狀。每一列的顏色一樣,這個很奇怪阿,不同列的顏...