簡體   English   中英

git pull 從 master 進入開發分支

[英]git pull from master into the development branch

我有一個名為 dmgr2(開發)的分支,我想從主分支(實時站點)中提取並將所有更改合並到我的開發分支中。 有一個更好的方法嗎? 這是我在提交更改后計划做的事情:

git checkout dmgr2
git pull origin master

這應該將實時更改拉入我的開發分支,還是我有這個錯誤?

您列出的步驟將起作用,但有一種更長的方法可以為您提供更多選擇:

git checkout dmgr2      # gets you "on branch dmgr2"
git fetch origin        # gets you up to date with origin
git merge origin/master

fetch命令可以在merge之前的任何時候完成,也就是說,你可以交換 fetch 和 checkout 的順序,因為fetch只是轉到指定的遠程( origin )並對其說:“給我你擁有的一切我不”,即所有分支上的所有提交。 它們會被復制到您的存儲庫中,但對於遠程上名為branch任何分支命名為origin/branch

此時,您可以使用任何查看器( git loggitk等)查看您沒有的“他們擁有的東西”,反之亦然。 有時這僅對溫暖的模糊感覺有用(“啊,是的,這實際上就是我想要的”),有時它對完全改變策略很有用(“哇,我還不想要那種東西”)。

最后, merge命令接受給定的提交,您可以將其命名為origin/master ,並盡一切努力將該提交及其祖先帶到您運行merge時所在的任何分支。 您可以插入--no-ff--ff-only以防止快進,或者僅當結果是快進時才合並,如果您願意的話。

使用序列時:

git checkout dmgr2
git pull origin master

pull命令指示 git 運行git fetch ,然后是git merge origin/master的道德等價物。 因此,這與手動執行這兩個步驟幾乎相同,但存在一些您可能不太關心的細微差別。 (特別是pull運行的fetch步驟帶來origin/master ,並且它不會更新你的 repo 中的 ref: 1任何新的提交最終只由特殊的FETCH_HEAD引用引用。)

如果您使用更明確的git fetch origin (然后可選地環顧四周),然后使用git merge origin/master序列,您還可以將您自己的本地master與遠程同步,只需在網絡上運行一次fetch

git fetch origin
git checkout master
git merge --ff-only origin/master
git checkout dmgr2
git merge --no-ff origin/master

例如。


1第二部分在 git 1.8.4 中已更改——我說“已修復”,它現在機會性地更新“遠程分支”引用。 (正如發行說明所說,故意設計決定跳過更新,但事實證明,更多的人更喜歡 git update 它。如果你想要舊的遠程分支 SHA-1,它默認保存在,因此可以從 reflog 中恢復。這也啟用了一個新的 git 1.9/2.0 功能來查找上游 rebase。)

情況:在我的本地分支工作,但我喜歡在名為dev的開發分支中保持更新。

解決方案:通常,我更喜歡這樣做:

git fetch
git rebase origin/dev

這對我有用。 用於從 master 獲取最新代碼到我的分支

git rebase origin/master

場景

我有主更新和我的分支更新,我希望我的分支通過變基跟蹤主,以正確跟蹤所有歷史記錄,讓我們稱我的分支為 Mybranch

解決方案

git checkout master    
git pull --rebase    
git checkout Mybranch    
git rebase master
git push -f origin Mybranch
  • 需要使用 git mergetool &, git rebase --continue, git rebase --skip, git add -u 解決所有沖突,根據情況和 git 提示,直到全部解決

(對最后階段的更正,由 Tzachi Cohen 提供,使用“-f”強制 git 在服務器上“更新歷史記錄”)

現在分支應該與 master 和 rebase 對齊,並且遠程更新,所以在 git log 沒有“behind”或“ahead”,只需要刪除所有本地沖突 *.orig 文件以保持文件夾“干凈”

git pull origin master --allow-unrelated-histories

如果您的歷史記錄不匹配並且無論如何都想合並它,您可能想要使用它。

參考這里

如果您在功能 1分支上並且想要拉主-(也許是為了獲得最新的合並更新/減少合並沖突的機會),請執行以下操作:

git pull
git merge origin/master

master拉入您的分支 - 不影響 master!

這會將自從你們兩個分道揚鑣以來進入 master 的任何東西都拉到你的分支中。

如果您的分支已經公開,則可以這樣做,因為它不會重寫歷史記錄。

這是我的解決方案

git checkout mybranch
git rebase master mybranch
git add .
git rebase --continue
git commit -a -m "test"
git pull
git push

git 添加。 用於舞台文件

還有另一種解決方案可以讓您的主更改到您的分支

git checkout mybranch
git fetch origin
git merge origin/master

當您使用 rebase 時,您的 git 歷史很清楚,但使用合並原點/主站更容易

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM