主頁 > 移動端開發 > 如何同時在兩個不同的分支上擁有git的HEAD

如何同時在兩個不同的分支上擁有git的HEAD

2021-12-31 02:55:04 移動端開發

我希望標題不要太混亂,我將嘗試在這里更詳細地解釋我遇到的問題:

假設您有一個包含代碼檔案(例如“main.py”)和安裝檔案(例如“setup.env”)的存盤庫。現在,代碼對于在存盤庫上作業的每個人都是通用的,但設定特定于每個貢獻者。對于這個例子,假設忽略設定檔案并將設定移動到單獨的子模塊中不是一個選項。

如果我們現在為通用和個人更改分別創建兩個名為“feat-code”和“feat-setup”的分支,是否可以同時在兩個分支上擁有當前 HEAD?這將有效地合并兩個歷史記錄,而無需實際合并和創建提交。

uj5u.com熱心網友回復:

您不能立即執行此操作,但是您可以擁有單獨的 git 存盤庫用于個人設定。我個人不建議這樣做。

通常當 setup 存盤在 git repo 中時,它是模板,必須單獨更改。它們被添加到 .gitignore 檔案中,所以不要擔心更改。如果您創建新的,請記住在個性化之前將其添加到 .gitignore。

uj5u.com熱心網友回復:

不,你不能那樣做。

HEAD在 Git 中看起來像一個分支名稱,但它不是:它是一個符號。對于某些人來說,當他們使用 Git 的單字符同義詞時,這更有意義@@為同一個意思HEAD它是代表一個符號:當前分支的名字1 因此,如果您當前的分支是feat-code,則@意味著feat-code如果您當前的分支是feat-setup,則@意味著feat-setup并且HEAD只是一種更長的書寫方式@

當您使用git switch(或稱老git checkout在其git switch模式),你Git的指示來改變這個名字@代表在此程序中,您還告訴 Git 切換簽出的提交,除了下面概述的一種特殊情況。這意味著洗掉來自當前提交的所有檔案我已經選擇了我想要使用的提交,使用我在命令列上給你的分支名稱。提交中取出所有檔案

要理解這一點,您需要知道 Git 實際上就是關于commits 的你所做的大部分事情——除了進行提交的程序——都是說“看看這個提交”或“看看那個提交”或“提取一些提交”或“向我展示從某個特定提交開始的提交”的方式. 所以你需要了解所有關于提交的資訊:

  • 每個提交都有編號,帶有一個隨機的、丑陋的十六進制數字,該數字是提交所獨有的當您進行新的提交時,它將永遠使用數字;任何地方的其他提交都不能再次使用該數字。2

  • 每個提交存盤——永遠(或只要提交本身繼續存在)——兩件事:

    • 提交具有每個檔案的快照。更準確地說,它有 Git“知道”的所有檔案的快照(見下文)。這些檔案以壓縮、Git 化和重復資料洗掉格式存盤。只有 Git 可以讀取它們,實際上沒有任何東西——甚至 Git 本身——都無法覆寫它們。

    • 提交還包含一些元資料,例如提交者的姓名和電子郵件地址。它有一些日期和時間戳以及一些其他資訊。一條資訊是針對 Git 本身的:每個提交都有一個串列——通常只有一個元素長——以前存在的提交,Git 稱之為該提交的父項或父項。

  • 所有提交——所有 Git 內部物件,真的——都是只讀的。任何提交的任何部分都不能更改。

這意味著你不能真正做任何提交。您必須將其中一個提取到作業區中。您提取的提交是您當前的提交,而您進行作業的作業區現在已從該提交中取出檔案。Git 將此作業區稱為您的作業樹作業樹,并且作業樹具有關聯的當前提交當前分支,如符號@ or the name HEAD`所記住的


1還有一種“分離的 HEAD”模式,您不在任何分支上。Git 將此用于git rebase,以及其他幾種內部模式,如果您想“回到過去”并查看舊提交,您可以使用此模式。但是,您通常不會在這種模式下做任何新作業,因為一旦您再次選擇分支名稱,這種模式下所做的新提交就會“丟失”(從某種意義上說,您和 Git 都找不到它們)。所以在這種模式下作業需要格外小心,就像 Git 在正在進行的變基程序中使用一樣。

2這在技術上是不可能的,但巨大的提交哈希 ID 推遲了世界末日。我們必須希望它推遲足夠長的時間。


你的作業樹和 Git 的索引

當您選擇要簽出的分支時,該分支中的檔案將進入 Git 的索引,然后進入您的作業樹。所以 Git 現在知道所有這些檔案。他們來到的提交您選擇。它們現在位于 Git 的索引(或暫存區)和您的作業樹中。如果您在作業樹中創建其他檔案,Git知道它們,除非您運行它們,否則它們不會出現在下一次提交中git add

當您運行 時git commit,Git 會打包Git 索引(也稱為暫存區)中的所有檔案所以如果你修改了一個作業樹檔案,你需要運行git add它:這告訴 Git使臨時區域副本與作業樹副本匹配如果你創建了一個全新的檔案,你必須運行git add它:這再次告訴 Git 相同的事情。無論哪種方式,臨時區域(索引)副本現在都會更新以匹配作業樹副本,并且下一次提交將具有該檔案。

這意味著 Git 的索引(或暫存區)充當您提議的下一次提交您可以查看并處理作業樹中的檔案,但您必須使用git add它們來更新提交建議。

git worktree add

一個非常有用的技巧是 Git 允許您一次擁有多個活動的作業樹。每個作業樹都有自己的 HEAD索引。Git 確實要求每個作業樹都位于不同的分支上(或處于 detached-HEAD 模式)。這樣做的原因與分支名稱的作業方式有關,我尚未介紹。這是一個快速總結。

分支名稱的作業原理

在 Git 中,分支名稱只是選擇一個特定的提交。我們說分支名稱指向這個提交。該名稱通過包含該提交的原始哈希 ID 來實作這一點。

Remember above that I said that each commit stores the raw hash ID(s) of some previous commit(s), usually just one. This means that commits also point to other commits—backwards, the way Git works:

... <-a123456  <-b789abc  <-fedcba9  ...

might be a string of (shortened) hash IDs, with each commit pointing backwards to its parent. If we replace the hash IDs with uppercase letters, we get something more usable by humans:

...--F--G--H   <-- somebranch

The name somebranch contains the hash ID of the latest commit on the branch, which in this case is hash H. Commit H contains a snapshot of all files, plus metadata that includes the raw hash ID of earlier commit G. Commit G contains a snapshot of files, plus the hash ID of earlier commit F. This goes on forever, or at least, until we get to the very first commit ever, which—since it can't point backwards to any earlier commit—doesn't. (Its list of previous hash IDs is empty, in other words.)

Now, more than one branch name can select the same commit, like this:

...--G--H   <-- main, feature

We need to know which name you're using:

...--G--H   <-- main (HEAD), feature

This says you're using commit H through the name main: your current branch is main and its commit is H. If you run git switch feature, you get:

...--G--H   <-- main, feature (HEAD)

You're still using commit H, but now you're using it through the name feature.

So this is the special case where Git doesn't ever have to remove any files: you move from commit H to, well, commit H. Obviously they have the same files. So there's nothing to remove-and-replace.

Note that once you make a new commit, the name you're on updates. New commit I will point back to existing commit H, but the current branch name now points to new commit I:

...--G--H   <-- main
         \
          I   <-- feature (HEAD)

再做一次新的提交,你有:

...--G--H   <-- main
         \
          I--J   <-- feature (HEAD)

這是 Git 中分支的真正秘密:一個名稱只是選擇一個提交您可以隨心所欲地移動名稱——它們是可變的,并且您的分支名稱由決定。提交是永久性的,只讀的; 它們無法更改,只能找到(通過名稱或其他提交)或找不到。例如,如果您 make J,但后來認為它很糟糕,您可以使用 將其從feature(以及 Git 的索引和您的作業樹)中彈出git reset --hard,給出:

...--G--H   <-- main
         \
          I   <-- feature (HEAD)
           \
            J   [abandoned]

請注意,沒有發生任何事情J:它仍然在那里。你只是再也找不到它了。

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

標籤:混帐

上一篇:將`gitremoteaddusptream`添加到存盤庫但使用Ansible

下一篇:使用WSL2和zsh進行緩慢的git自動完成

標籤雲
其他(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)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more