標籤:

Github 上怎樣把新 commits 使用在自己的 fork 上?

我 fork 了別人的代碼,然後做了適合自己的修改。現在他的版本有更新,和我的修改不衝突,我想直接 pull 到自己的 fork 版本中,該怎樣做?

我只找到了把我 fork 版本的修改 pull 到原版本的方法,但無法把原版本的修改 pull 到我 fork 的版本中。

我使用 github 的經歷是這樣的:

1. 沒有接觸 git 直接使用 github

2. 使用 github 是通過 web 和 windows 客戶端,不會命令行


讓我來教你只用Github不用命令行的方法:

舉例說明: (每一步都有截圖)

這一頁往下面拉:

這裡用 @王月 的repo做了例子, 他的頻繁更新讓我有了截圖的機會~ 感謝他.

玩的愉快!


https://help.github.com/articles/fork-a-repo

Step 3: Configure remotes

When a repo is cloned, it has a default remote called origin that points to your fork on GitHub, not the original repo it was forked from. To keep track of the original repo, you need to add another remote named upstream:

$ cd Spoon-Knife

# Changes the active directory in the prompt to the newly cloned "Spoon-Knife" directory

$ git remote add upstream https://github.com/octocat/Spoon-Knife.git

# Assigns the original repo to a remote called "upstream"

$ git fetch upstream

# Pulls in changes not present in your local repository, without modifying your files

Pull in upstream changes

If the original repo you forked your project from gets updated, you can add those updates to your fork by running the following code:

$ git fetch upstream

# Fetches any new changes from the original repo

$ git merge upstream/master

# Merges any changes fetched into your working files

Read the friendly manual.

---- 更新:不用命令行的話我也不會了 ----


原諒我只會用命令行,還是給一個使用命令行的方法給需要的人吧。

步驟:

1、配置上游項目地址。即將你 fork 的項目的地址給配置到自己的項目上。比如我 fork 了一個項目,原項目是 wabish/fork-demo.git,我的項目就是 cobish/fork-demo.git。使用以下命令來配置。

? git remote add upstream https://github.com/wabish/fork-demo.git

然後可以查看一下配置狀況,很好,上游項目的地址已經被加進來了。

? git remote -v
origin git@github.com:cobish/fork-demo.git (fetch)
origin git@github.com:cobish/fork-demo.git (push)
upstream https://github.com/wabish/fork-demo.git (fetch)
upstream https://github.com/wabish/fork-demo.git (push)

2、獲取上游項目更新。使用 fetch 命令更新,fetch 後會被存儲在一個本地分支 upstream/master 上。

? git fetch upstream

3、合併到本地分支。切換到 master 分支,合併 upstream/master 分支。

? git merge upstream/master

4、提交推送。根據自己情況提交推送自己項目的代碼。

? git push origin master

由於項目已經配置了上游項目的地址,所以如果 fork 的項目再次更新,重複步驟 2、3、4即可。


不用命令行也是可以的,github 上 pull 操作是建立在創建 pull request 基礎上的,你對原倉庫應用你 fork 的更新是對原倉庫提 PR,對 fork 倉庫應用原倉庫的更新是給自己的 fork 倉庫提 PR。所以你只需要 compare 的時候選好兩邊的分支,然後提 PR 就行了。


看官方幫助文檔的 sync 一節就可以。Syncing a fork · GitHub Help

簡單地說

1 配置上游 remote 地址,添加上游分支 Configuring a remote for a fork · GitHub Help

2 獲取上游更新

3 和本地的改動合併

4 commit push


在web中,你既然已經知道了把你的代碼pull回原版本的方法

在pull request時,只需要把左右兩邊通過下拉菜單調換一下位置就可以把原版本的新改動pull到你的代碼了。

另外,我不知道這種方法是不是一般的方法,感覺也挺2的,我也在找一種能自動把原版本的更新和修改能同步到我的fork版本上的方法。


總結了兩種方式解決,並有詳細說明Git學習筆記 | blueyi"s notes


可以參考http://gevin.me/370.html


還是命令行比較簡單。

步驟:

你打開terminal,cd 到你本地的那個Project主目錄下面,然後git remote add original_proj GitHub · Build software better, together....(就是原po主的repository。你可以通過git remote -v來查看remote的設置。接下來,如果項目的原po主有了更新,你就只要 git pull original_proj master就ok啦。

PS:那個original_proj隨便你起個名字就行,到時候知道指的是哪個博主的git地址就好,master也是Branch名字而已。

可以參考這個Contribute to someone"s repository


反向 PR,若有問題用命令行解決衝突,PR 頁面有教程。

然後建議你打開客戶端,Options 裡面把默認 Shell 調成 Git Bash。

接著你可以打開桌面上的 git shell 圖標,跟著教程做吧。


推薦閱讀:

如何評論開源中國的山寨Github?
如何在github上下載單個文件夾?
在 GitHub 上有哪些適合前端初學者學習的開源項目?
怎樣在 GitHub 下收集 Star?
Git 有哪些好用的圖形化客戶端?目前用的最多的是?

TAG:Git | GitHub |