簡體   English   中英

從一個 git 分支拉出,推入另一個

[英]pull from one git branch, push into another

我有一個本地 BitBucket 服務器,我將我的更改從 Web UI 合並到主服務器。 我想與一個永久的個人分支合作,我將定期從中創建合並請求。

我希望git pullorigin/master合並到我的本地master ,並git push將我的本地 master 推送到origin/itsadok 然后我將在服務器上創建一個合並請求,並將我的更改從origin/itsadok合並到origin/master

BitBucket server:   origin/itsadok --- via PR --> origin/master
                       ↑                              |
Local machine:          \---------- master <---------/

看起來很簡單。

我知道我可以手動執行git push origin master:itsadok ,但我希望它是默認值。 似乎設置默認推送目標的唯一方法是將branch.master.merge配置為refs/heads/itsadok (並將push.default配置為upstream ),但是 pull 也會從我的個人分支合並。

有沒有辦法配置 git 以便默認推送和拉取將按上述方式工作?

編輯:我想到我可以通過將push.default設置為current 、將本地分支命名為與遠程個人分支相同的名稱並將branch.itsadok.merge設置為 refs/heads/master 來實現非常相似的功能。 換句話說:

BitBucket server:   origin/itsadok --- via PR --> origin/master
                       ↑                              |
Local machine:          \---------- itsadok <--------/

這幾乎有效,但是因為我的腳本假設我的本地分支稱為master ,所以這個解決方案對我來說相當不方便。 不過,如果沒有其他想法,我會滿足於此。

您可以通過正確映射推送引用規范來實現所描述的行為。 push manual 中所述,git 按以下順序查看要推送的內容:

  • 命令行中明確列出的參數或選項(如果存在)
  • remote.<remote_name>.push配置如果不為空
  • 否則push.default配置

所以你可以讓master跟蹤origin\\master ,所以拉動工作正常,然后配置remote.origin.push ,所以不帶參數的推送適合你的工作流程:

git config remote.origin.push refs/heads/master:refs/heads/itsadok

您可以通過打印與上游分支檢查配置git rev-parse --symbolic-full-name @{upstream}與推分支git rev-parse --symbolic-full-name @{push}

但是,有幾個警告:

  • git status會將 master 與其上游進行比較,因此即使在實際推送提交之后,您也會看到“提前 1 次提交”通知。
  • 不帶參數調用git push ,而在非 master 分支上仍然會將數據從 master 推送到 itadok。 如果您想嘗試修復此問題,最好的開始方法可能是refspec 配置示例

暫無
暫無

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

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