Git: 如何從遠端拉取連結建立本地端尚未存在的branch以及如何合併特定檔案至指定branch

Yu-Cheng Hung
Dec 23, 2021

--

Reference: https://icon-icons.com/icon/git-scm-logo/170097

情境

遠端branches:

master, develop, feature-a

本地端branches:

develop, feature-a

當初pull專案到本地端後,整理branch時不小心把master砍掉,後面開發時都是在遠端做feature合併到develop再合併到master,因此也就一直放著沒處理,然而今天遇到一個情況是,feature-a有5個新commits,也已經合併到develop,但暫時還不想全部合併到master,只想合併commit中的一個檔案到master。

作法

一、拉取遠端master至本地端

因為需要與遠端同步,所以並不能直接在本地端執行:

git checkout master

這樣做會直接同步你本地端的某一分支(看你切換在哪)的程式碼,而我們目前是希望建立一個與遠端master同步的branch:

git checkout -b master origin/master

倘若出現類似的error msg:

fatal: 'origin/master' is not a commit and a branch 'master' cannot be created from it

可以嘗試執行:

git fetch --all

這邊如果出現https驗證輸入帳密但又驗證失敗的話,請改ssh key驗證並且:

git remote set-url origin {your repository SSH URL}

如果驗證成功但是建立branch還是失敗,可嘗試:

git remote set-branches --add 'origin' 'master'

然後:

git fetch 'origin'

再執行:

git checkout --track 'origin/master'

成功訊息:

Switched to a new branch 'master'
Branch 'master' set up to track remote branch 'master' from 'origin'.

可用 git log確認一下同步狀況。

二、合併develop的特定檔案至master

因為這些commit都有牽扯到其他檔案的修改,所以並不考慮cherry-pick。

1.切換到你想要合併的目標分支 (master):

git checkout master

2.選擇特定檔案 (testfile1.php)和特定分支 (develop):

git checkout develop testfile1.php

3.確認狀態:

git status

4.沒問題即可commit:

git commit -m "{ your commit message }"

--

--