我在開發分支上開發。通常我會從開發分支創建我的功能分支。就像場景1:
方案 1
development -> featureA -> development -> megre featureA = COMPLETE
// A few feature branches later I realise I need to do something in featureA
development -> featureA_1 -> development -> megre featureA_1 = COMPLETE
但我也認為我可以采用已經存在的 featureA 分支并將其更新。就像在場景 2 中一樣。
方案 2
development -> featureA -> development -> megre featureA = COMPLETE
// A few feature branches later I realise that I still have to do something in featureA
develompment -> featureA
-> merge development
-> ..add new things ...
-> development
-> merge featureA_1
問題:方案 B 會導致問題嗎?
uj5u.com熱心網友回復:
重要的是要意識到,對于 Git,分支——或者實際上是分支名稱——是無關緊要和不重要的。在 Git 中重要的是commits。完全不使用任何分支名稱就可以使用 Git:人類以這種方式作業非常不方便。
Git 通過哈希 ID 查找提交。實際上,提交的哈希 ID 是它的“真實姓名”:請參閱Wikipedia 定義,如果您不介意迷失在 TV-Tropes 頁面中,請參閱 TV 比喻“I Know Your True Name”。但是哈希 ID 又大又丑,人類無法記住:你能一眼看出是dcc0cd074f0c639a0df20461a301af6d45bd582e從dcc0a86f2f2f036b3a379f41a4b754f8bb73ed6b嗎?但是,如果其中一個是master現在,一個是 master過去某個時間或其他名稱,那么這些對人類來說是有意義的。所以我們使用分支名稱。
在 Git 中,分支名稱是具有幾個特定屬性的名稱。 Git 中的所有參考都存盤一個哈希 ID,因此分支名稱存盤一個哈希 ID。使分支名稱特別的原因是:
- 它的全名以
refs/heads/:開頭,例如dev是 的縮寫refs/heads/dev; - Git 將允許你“打開”一個分支名稱:其他名稱強制 Git 所謂的分離 HEAD模式,
--detach使用時需要標志,使用時git switch自動分離git checkout;和 - 當您進行新提交并“在”某個分支上時,Git 會自動將新提交的哈希 ID 寫入分支名稱。
正是這最后一個屬性使分支名稱特別有用:在or之后,我們“在”那個分支,新的提交會自動推進分支名稱。如果沒有這個特性,我們將不得不寫下所有的提交哈希 ID,以便能夠再次找到它們,或者同樣令人討厭的東西(也許是我們作業時的每個名稱的手冊)。git checkout branchgit switch branchgit update-ref
無論如何,一旦您意識到分支名稱的目的只是為了能夠找到提交,那么以前關于 Git 的許多神秘事物就會變得簡單得多。如果您將存盤庫可視化為提交——通過單向、向后的箭頭連接,以便每個“子”提交記住其父級或父級——你會得到一個簡單的有向無環圖,如下所示:
D <-E <-F
/
A <-B <-C
\
G <-H
whereF和H是兩個“分支”中的最新提交,它們在 commit 處合并或分開,C具體取決于您是“向后”(Git 樣式)還是“向前”(人類樣式)遍歷您的提交。 分支名稱只是定位特定的提交:
D--E--F <-- br1
/
A--B--C <-- main
\
G--H <-- br2
例如,或者也許:
D--E--F <-- develop
/
A--B--C--G--H <-- master
請注意,這些是相同的圖表。一個圖有一個名稱 commit C,一個沒有,這一事實不會影響該圖。由于 Git 是關于提交和圖表的——而不是關于分支名稱的——這些基本上是相同的存盤庫,就 Git 無論如何都會做的而言。要將第二個更改為第一個,我們所要做的就是重命名develop為br1,重命名master為br2,并添加一個main指向 commit的名稱C。
這可能不是如何人會打算利用這一點,但是這就是Git把。所以像這樣的問題:
方案 B 會導致問題嗎?
真的是關于人類是否會犯某些錯誤的問題。我認為沒有人能真正正確地預測人類的可靠性,但如果你知道你個人犯了什么樣的錯誤,你也許能夠評估什么最適合你。不過,這并不是一個可以通過獲取 StackOverflow 答案來解決的技術問題。??
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/409109.html
標籤:
下一篇:獲取導致合并的最后一次提交
