<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                >[success] # GIT 分支 1. `HEAD `文件是一個指針,其有一個特性就是總會指向當前分支的最新的一個 `commit `對象 ![](https://img.kancloud.cn/e5/cd/e5cd8eb11f9ef2754ad34e7beacaba2d_1080x503.png) 2. 查看分支存儲`cat .git/HEAD` ![](https://img.kancloud.cn/bf/8a/bf8ab42499832c47a075c4a0435aed39_221x42.png) `cat .git/refs/heads/master` 查看當前master 的最新的`commit` 類型文件 ![](https://img.kancloud.cn/15/4c/154c366766ea1ef874e7fc87aeb14c1a_314x42.png) * 日志`git log --graph` ![](https://img.kancloud.cn/7a/76/7a760bac66fb19c89c9051b2114462ac_775x370.png) * 讓分支出現不同步,此時使用`git checkout testing`創建一個 `testing `分支,并修改文件在 `testing` 分支提交到本地倉庫,切換回分支`master `( 可以發現此時`HEAD` 在`master`),但此時 `testing` 分支是領先的 ![](https://img.kancloud.cn/ec/f0/ecf0d799859280cabb83f45390babdf4_540x317.png) 接著做操作在 `master` 分支修改提交代碼到本地倉庫,執行`git log --all --graph --oneline` * 可以發現從`c4f4a4a` 節點開始形成了兩個走向 ![](https://img.kancloud.cn/a0/6a/a06af1e8595268a7bb06490effd293ec_289x105.png) * 用圖形表示(此圖對應commit 信息并非當前案例) ![](https://img.kancloud.cn/d8/11/d811f8f5b04e978dfba7831809005493_1485x343.png) >[danger] ##### 總結 當前`commit`在哪里,`HEAD`就在哪里,這是一個永遠自動指向當前`commit`的引用,所以你永遠可以用`HEAD`來操作當前`commit` ***** `HEAD`是 Git 中一個獨特的引用,它是唯一的。而除了`HEAD`之外,Git 還有一種引用,叫做`branch`(分支)。`HEAD`除了可以指向`commit`,還可以指向一個`branch`,當它指向某個`branch`的時候,會通過這個`branch`來間接地指向某個`commit`;另外,當`HEAD`在提交時自動向前移動的時候,它會像一個拖鉤一樣帶著它所指向的`branch`一起移動 ![](https://img.kancloud.cn/8e/e6/8ee6e7a93f0470501dd443c837fb4382_229x266.png) * `HEAD `-> `master`分支->`commit` ![](https://img.kancloud.cn/2d/0f/2d0f30209ae85dba156b5395c2559f49_625x49.png) * 當創建`commit `時候 `HEAD`會帶著`master`一起移動到最新的`commit` ![](https://img.kancloud.cn/72/10/72102da3f15205a83261888541b22a3b_568x306.gif) >[danger] ##### master 分支 1. `Git `的 `master `分支并不是**一個特殊分支**,只是`Git `的默認分支名字是 `master` 2. 新創建的 repository(倉庫)是沒有任何`commit`的。但在它創建第一個`commit`時,會把`master`指向它,并把`HEAD`指向`master` 3. 當有人使用`git clone`時,除了從遠程倉庫把`.git`這個倉庫目錄下載到工作目錄中,還會`checkout`(簽出)`master`(`checkout`的意思就是把某個`commit`作為當前`commit`,把`HEAD`移動過去,并把工作目錄的文件內容替換成這個`commit`所對應的內容)。可以理解成**遠程倉庫如果有多個默認分支,往往在第一次clon 下來代碼,git 會為了確定當前 HEAD 往往默認指向 master 也就是間接指向master 的最新commit** ![](https://img.kancloud.cn/97/8b/978b41462d6639557394c21032cd1533_682x620.gif) >[danger] ##### 切換分支時候 ![](https://img.kancloud.cn/bf/f2/bff2dab61e8e024c29d0fb77372d53d1_506x432.gif) >[info] ## 分支指令 1. `git branch xxx` -- 創建一個分支,例如創建一個`testing `分支 `git branch testing ` ![](https://img.kancloud.cn/d6/e7/d6e7f7ff2ee8fab1acb1c13b6527f136_575x344.png) 2. `git checkout xxx` -- 切換分支`HEAD`就會指向新建的`branch` ![](https://img.kancloud.cn/81/1a/811a5eaeaf09680994118995b2f369e2_812x279.png) 創建分支后自動切換到創建的分支`git checkout -b xxx` 3. `git branch -d xxx` -- 刪除分支 * `HEAD`指向的`branch`不能刪除。如果要刪除`HEAD`指向的`branch`,需要先用`checkout`把`HEAD`指向其他地方 * 由于 Git 中的`branch`只是一個引用,所以刪除`branch`的操作也只會刪掉這個引用,并不會刪除任何的`commit`。如果沒有任何一個`branch`可以回溯到這條`commit`,那么在一定時間后,它會被 Git 的回收機制刪除掉 ![](https://img.kancloud.cn/c5/4a/c54adc08be141f1193cc0f829330c43d_297x132.png) * 刪除分支 ![](https://img.kancloud.cn/cc/8c/cc8cc0607bff7e08f0d0c73a3bdfe727_304x95.png) * 但依舊可以在 `objects `文件中找到 ![](https://img.kancloud.cn/08/89/08891152c68e42baf49cda7f7f5f689f_355x59.png) * 如果分支一次都沒有進行合并要刪除的話把`-d`改成`-D`,小寫換成大寫,就能刪除了 4. `git branch` -- 查看當前所有的分支 5. `git branch –v` -- 同時查看最后一次提交 6. `git branch --merged` -- 查看所有合并到當前分支的分支 7. `git branch --no-merged` -- 查看所有沒有合并到當前分支的分支 8. `git merge xxx` -- 分支合并 >[danger] ##### 分支合并 1. 合并分支指令 `git merge xxx` ,例如將`testing `分支合并到 `master` 分支,需要先將分支切換到 `master` 分支 執行`git merge testing ` * 如圖 testing 分支合并到了master 分支上,此時產生的新的 `commit` 節點會有兩個`parent` 指向 ![](https://img.kancloud.cn/94/4f/944f9179fa7e10eab35c82fd53ccd42f_422x201.png) ![](https://img.kancloud.cn/37/4d/374d59db191db808d0b3c90e2654f980_425x105.png) ![](https://img.kancloud.cn/06/7d/067ded2b781559efa29927f5952a12c9_640x454.gif) 2. `pull`的實際操作其實是把遠端倉庫的內容用`fetch`取下來之后,用`merge`來合并 >[danger] ##### HEAD 領先于目標 commit 如果`merge`時的目標`commit`和`HEAD`處的`commit`并不存在分叉,而是`HEAD`領先于目標`commit`,`merge`就沒必要再創建一個新的`commit`來進行合并操作,因為并沒有什么需要合并的。在這種情況下, Git 什么也不會做,`merge`是一個空操作 ![](https://img.kancloud.cn/18/a5/18a5465dc239fc723165f78186068760_397x385.png) >[danger] ##### HEAD 落后于 目標 commit——fast-forward 如果`HEAD`和目標`commit`依然是不存在分叉,但`HEAD`不是領先于目標`commit`,而是落后于目標`commit` ![](https://img.kancloud.cn/b8/d2/b8d2d9440f0b9eea5390a8ec61dbd6a5_565x359.png) 那么 Git 會直接把`HEAD`(以及它所指向的`branch`,如果有的話)移動到目標`commit` ![](https://img.kancloud.cn/90/92/9092622e1d3c31cb2c56612fa7a77594_577x400.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看