主頁 > .NET開發 > 需要明確涉及gitpull和pull請求的git作業流程

需要明確涉及gitpull和pull請求的git作業流程

2021-12-25 00:21:51 .NET開發

需要明確涉及 git pull 和 pull 請求的 git 作業流程

上圖讓我們對 git pull 和 git pull --rebase 有一個很好的了解。我對這里的一件事感到困惑。讓我詳細說明——

1. 案例1 -> git pull --rebase origin master

命令后我的本地主分支 - ABCXYD' E'

命令后我的遠程主分支 - ABCXY

如果我現在執行 git push origin master:master,我的遠程 master 分支看起來像 - ABCXYD' E'

2. 案例2 -> git pull origin master

命令后我的本地主分支 - ABCDEF

命令后我的遠程主分支 - ABCXY

在這種情況下 git push origin master:master 將如何表現?我無法理解為什么在任何情況下我們都希望在沒有 --rebase 的情況下使用 git pull?

uj5u.com熱心網友回復:

你缺少的是,我認為,最好通過避免 git pull. 不過,讓我們假設git pull有一個假設--merge選項,以便我們可以說您正在運行git pull --merge origin master. (您已經在進行合并;如果它是顯式選項,則此選項將是默認選項。)也就是說,您的git pull origin master運行相當于:

  1. git fetch origin; 然后
  2. git merge -m "merge branch master of <url>" origin/master.

這產生了圖表,他們繪制為:

A--B--C--D--E--F   <-- master
       \      /
        X----Y

(我把它橫著這里。90?旋轉CCW相匹配。)

我現在想建議像這樣重新繪制它:

        D--E
       /    \
A--B--C      F   <-- master
       \    /
        X--Y

現在我已經以這種方式繪制了圖形,哪些提交是“在”分支上的master如果你選擇了A-B-C-D-E-F為什么不也選擇X-Y如果你選擇了A-B-C-X-Y-F為什么不也選擇D-E

事實是,所有八次提交,包括D-E X-Y,都在“on”分支上master名稱 master標識提交F,但承諾F是一個合并提交它可以追溯到兩個不同的提交:EY. 這兩個不同的提交分別回傳到DX,并且這兩個不同的提交回傳到一個共同的共享起點C

CommitC兩個提示提交合并基礎,在您運行 Git 時,通過. 所以Git的發現你做了什么,上至-腿,通過運行在提交的快照之間的差異然后Git的發現,他們做了什么,上至-腿,通過之間運行DIFF然后 Git 獲取兩個差異并將它們組合起來,將組合結果應用到來自 commit 的共享快照,并使用它來進行新的合并提交git mergegit pullCECECYCYCF

合并提交F有一個快照,就像其他所有提交一樣。它與其他提交的不同之處在于它有兩個父級,E并且Y. 所以你可以問 Git:*從EtoF的變化以及你將得到的是由于合并的較低(在我的圖中)腿而帶來的變化;或者您可以詢問YtoF發生了什么變化,您會看到由于合并的上段而帶來了哪些變化。

無論如何,這就是合并的作業(和要點):合并作業,記錄合并作業的事實你現在可以確切地看到發生了什么:你在他們作業的時候做了一些事情,他們在你作業的時候做了一些事情,然后你一下子把它們結合起來。

使用 rebase 可以創建“更清晰”的歷史記錄:看起來他們做了一些事情,你等待他們完成,然后你開始你的任務,知道他們做了什么,完成了你的作業并提交了它。這并不是真正發生的事情,但也許它也一樣好。也許這更好,因為對于未來的你,或他們,或任何人,它更簡單:它不需要弄清楚在作業組合程序中是否出了問題。但是,如果確實出了問題,它可能會隱藏那件事什么,使您/他們/任何人的未來變得更糟

這就是為什么你有一個選擇:一個可能比另一個更好,或者不是。

[編輯:]有什么git push作用

當你運行時:

git push origin master

或其等效但更明確的變體:

git push origin master:master

你的 Git 將:

  • 使用名稱origin查找此git push操作的 URL ( git config --get remote.origin.pushurl; 如果未設定,git config --get remote.origin.url);
  • 呼叫回應此 URL 的任何內容:這應該是連接到另一個存盤庫的另一個 Git 軟體;
  • 提議master通過其哈希 ID向他們發送您的最新提交;
  • 從那里繼續。

Let's suppose first that you used rebase, so that your latest master commit hash ID is the hash ID of commit E'. Your Git offers to send this commit to their Git. They have never heard of this hash ID, so they say yes please, send that one, and tell me about its parent(s). Your Git then tells them the hash ID of commit D'; they haven't heard of that one either, so your Git tells them about D's parent Y. At this point they say to your Git: Ah, I have commit Y, you can stop sending things now; package up what I'll need for the commits I asked for, knowing that I have commit Y and every earlier commit.

Alternatively, let's suppose for the moment that you used git merge. Your Git will offer to send commit F (by hash ID). Their Git will say yes to that one, so your Git will now offer to send both parents, E and Y. They will say no thanks to Y because they already have that one, but yes please to E, so your Git will then offer D; they will say yes to that one as well, and your Git will then either offer C, or realize that they have C because they have Y: if your Git does offer C they'll say they don't need it, so this works out the same either way (it's just more efficient if your Git is smarter).

Now that your Git knows which commits to send, and which commits they already have, your Git makes a reasonably minimal thin pack—this technically depends on the chosen push protocol but everyone should be using the "smart" protocol these days—containing the necessary commits and objects, knowing that the other Git repository already has all the objects that go with all the commits they already have. Your Git then sends over this "thin pack" to them, which they save away for further use if all goes well.

Finally, your Git sends a polite request of the form: Please, if it's OK, set your branch name master to ________. Let me know if it was OK. Your Git fills in the blank with the hash ID from your own master. Their Git then checks to see if the new commits add on to their own master branch, without dropping from their master any commits they had before.

Both scenarios—where you ask them to add F, or where you ask them to add E'—do add on, keeping their existing commit Y in their branch, so they probably accept your polite request.

請注意,他們從不知道或關心您用于查找這些提交的分支名稱他們只關心他們被要求設定的分支名稱、哈希 ID 以及涉及的各種提交。

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/391828.html

標籤:混帐 变基 合并冲突解决

上一篇:如何在linux中將終端結果放入一個檔案全名的檔案中

下一篇:獲取遠程和本地分支的差異

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more