操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    當使用 Git 進行項目代碼管理時,難免會出現一些錯誤操作或需求變更,需要對代碼進行撤銷或修改。Git 提供了多種方式來撤銷已有的更改。本文將介紹 Git 中常用的 6 種撤銷更改的方法,幫助你更好地處理這些問題!

    在開始示例之前,先來創建一個簡單的 Git 倉庫,其中包含于一些提交:

    git init && \
    echo {} > package.json && git add . && git commit -m "Add package.json" && \
    echo FOO=bar > .env && git add . && git commit -m "Add .env" && \
    touch README.md && git add . && git commit -m "Add README" && \
    touch .gitignore && git add . && git commit -m "Add .gitignore"

    對于這些命令,實際上包含以下歷史操作:

    * 4753e23 - (HEAD -> master) Add .gitignore (4 seconds ago) <AleksandrHovhannisyan>
    * 893d18d - Add README (4 seconds ago) <AleksandrHovhannisyan>
    * 2beb7c7 - Add .env (4 seconds ago) <AleksandrHovhannisyan>
    * 0beebfb - Add package.json (5 seconds ago) <AleksandrHovhannisyan>

    1. 修改最近的提交

    在創建并提交了 .gitignore 文件后不久,決定修改這個文件:

    echo node_modules > .gitignore

    但不想在 git 日志歷史記錄中添加一個對于如此微小更改的提交記錄。或者需要在最近的提交消息中糾正一個拼寫錯誤。

    這兩種情況都是使用 git amend 命令的經典用例:

    git commit -a --amend

    簡單來說,git amend 命令用于在 git 中編輯 commit 和提交消息。這是 git 中撤銷更改的最基本方式之一。

    當運行上述代碼時,git 會打開選擇的編輯器并顯示最近的提交,在其中加入更改以進入暫存環境:

    Add .gitignore
    
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    #
    # Date:      Sun Oct 11 08:25:58 2022 -0400
    #
    # On branch master
    # Changes to be committed:
    #       new file:   .gitignore
    #

    保存并關閉文件,git 將修改最近的提交以包括新更改。也可以在保存文件之前編輯提交消息。

    如果要做的只是更新提交消息本身,例如修正一個拼寫錯誤,那實際上并不需要進入暫存環境。只需要運行這個命令:

    git commit --amend

    在編輯器中更改提交消息并保存文件,關閉即可。

    在修改了最近的提交后,日志將會看起來像這樣:

    * 7598875 - (HEAD -> master) Add .gitignore (31 seconds ago) <AleksandrHovhannisyan>
    * 893d18d - Add README (79 seconds ago) <AleksandrHovhannisyan>
    * 2beb7c7 - Add .env (79 seconds ago) <AleksandrHovhannisyan>
    * 0beebfb - Add package.json (80 seconds ago) <AleksandrHovhannisyan>

    現在,假設修改之前已經將舊提交推送到了遠程分支。如果運行 git status,就會被告知本地分支和遠程分支有一個提交不同:

    On branch master
    Your branch and 'origin/master' have diverged,
    and have 1 and 1 different commits each, respectively.
      (use "git pull" to merge the remote branch into yours)

    這也是正常的,因為遠程分支有舊的提交,而本地分支有修改過的提交。它們的哈希值不同,因為修改提交會更改其時間戳,這會強制 git 計算新的哈希值。要想用新的提交更新遠程分支,就需要強制推送它:git push -f。這將用本地分支覆蓋遠程分支的歷史記錄。

    需要注意,這里我們是在自己分支上進行的強制推送,在實際工作中,我們不應該強制推送到公共分支;如果這樣做,每個人的本地 master 副本都將與遠程副本不同,并且任何基于舊 master 的新功能現在都將具有不兼容的提交歷史記錄。

    2. 將分支重置為較舊的提交

    目前為止,我們有如下提交歷史:

    * 7598875 - (HEAD -> master) Add .gitignore (31 seconds ago) <AleksandrHovhannisyan>
    * 893d18d - Add README (79 seconds ago) <AleksandrHovhannisyan>
    * 2beb7c7 - Add .env (79 seconds ago) <AleksandrHovhannisyan>
    * 0beebfb - Add package.json (80 seconds ago) <AleksandrHovhannisyan>

    我們再來向 master 添加一個提交:

    touch file && git add . && git commit -m "Add a file"

    現在提交歷史變成了這樣:

    * b494f6f - (HEAD -> master) Add a file (5 seconds ago) <AleksandrHovhannisyan>
    * 7598875 - Add .gitignore (3 minutes ago) <AleksandrHovhannisyan>
    * 893d18d - Add README (4 minutes ago) <AleksandrHovhannisyan>
    * 2beb7c7 - Add .env (4 minutes ago) <AleksandrHovhannisyan>
    * 0beebfb - Add package.json (4 minutes ago) <AleksandrHovhannisyan>

    幾分鐘后,出于某種原因,我們決定不再保留最近的提交。要想刪除它,只需在 HEAD 指針之前硬重置一次提交,該指針始終指向當前分支上的最新提交:

    git reset --hard HEAD~1

    波浪號 (~) 后跟一個數字告訴 git 它應該從給定的提交(在本例中為 HEAD 指針)回溯多少次提交。由于 HEAD 總是指向當前分支上的最新提交,這告訴 git 對最近提交之前的提交進行硬重置。

    輸出結果如下:

    HEAD is now at 7598875 Add .gitignore

    硬重置是撤消 git 更改的一個便捷方法,但這是一個破壞性過程——該提交中的所有更改都將丟失,找回它們的唯一方法是通過 git reflog命令(后面會詳細介紹)。

    我們還可以重置為 HEAD~nth 提交,在這種情況下,該提交期間和之后的所有工作都將丟失:

    git reset --hard HEAD~4

    或者甚至是特定的提交,如果有它的哈希:

    git reset --hard <hash-id>

    當然也不限于僅針對當前分支中的提交進行重置,還可以重置本地分支以指向另一個本地分支:

    git reset --hard <someOtherBranch>

    甚至到遠程分支:

    git reset --hard origin/master

    這個就很有用,例如,如果不小心將內容提交到本地 master 分支。假設應該在一個 feat/X 分支上進行提交,但忘記了創建它,而且一直在向本地 master 提交代碼。

    當然,我們也可以使用 git cherry-pick 來解決這個問題,但是如果有很多次提交怎么辦?這有點痛苦,而 reset 可以輕松搞定。

    要解決此問題,現在需要創建功能分支:

    git checkout -b feat/X

    并強行將本地 master 分支重置為遠程 master 分支:

    git checkout master && git reset --hard origin/master

    并且不要忘記回到功能分支,這樣就不會重復同樣的錯誤:

    git checkout feat/X

    軟重置分支

    正如上面提到的,如果進行硬重置,將丟失在該提交時或之后所做的所有工作。當然,可以從那個狀態中恢復過來,但需要額外的操作。相反,如果想在 git 的暫存環境中保留更改,可以進行軟重置:

    git reset --soft HEAD~1

    同樣,可以只使用提交哈希而不是從 HEAD 指針回溯:

    git reset --soft a80951b

    該提交引入的所有更改以及它之后的任何提交都將出現在 git 的暫存環境中。在這里,可以使用 git reset HEAD file(s) 取消暫存文件,對已經暫存的文件進行所需的任何更改。然后,可以根據需要進行任何新的提交。

    用例:在一個提交中提交了文件 A 和文件 B,但后來意識到它們實際上應該是兩個獨立的提交。可以執行軟重置并選擇性地提交一個文件,然后單獨進行另一個提交,所有這些操作都不會丟失任何工作內容。

    創建備份分支

    我們可以將分支用作備份機制,以防你知道即將運行的某個命令(例如 git reset --hard)可能會損壞分支的提交歷史記錄。在運行這些命令之前,可以簡單地創建一個臨時備份分支(例如 git branch backup)。如果出現任何問題,就可以針對備份分支執行硬重置操作:

    git reset --hard backup

    3. 交互式變基

    Git 的交互式變基是其最強大、最靈活的命令之一,允許倒回歷史并進行任何所需的更改。如果想要刪除舊的提交、更改舊的提交消息或者將舊的提交壓縮成其他的提交,那么這就是你需要使用的命令。所有交互式變基都始于 git rebase -i 命令,并且必須指定一個提交來重新設置當前分支。

    刪除舊提交

    目前為止,我們有如下提交歷史:

    * 7598875 - (HEAD -> master) Add .gitignore (20 minutes ago) <AleksandrHovhannisyan>
    * 893d18d - Add README (21 minutes ago) <AleksandrHovhannisyan>
    * 2beb7c7 - Add .env (21 minutes ago) <AleksandrHovhannisyan>
    * 0beebfb - Add package.json (21 minutes ago) <AleksandrHovhannisyan>

    第二次提交看起來有點可疑,為什么要將本地環境變量 (.env) 檢查到 git 中? 顯然,我們需要刪除此提交,同時保留所有其他提交。為此,我們將針對該提交運行交互式變基:

    git rebase -ir 2beb7c7^

    這將調出這個編輯器:

    pick 2beb7c7 Add .env
    pick 893d18d Add README
    pick 7598875 Add .gitignore

    要刪除 2beb7c7,需要將 pick 命令更改為 drop(或 d)并保持其他不變:

    drop 2beb7c7 Add .env
    pick 893d18d Add README
    pick 7598875 Add .gitignore

    現在關閉并保存文件,會得到如下確認:

    Successfully rebased and updated refs/heads/master.

    現在,如果執行 git log,將不再看到該提交:

    * 11221d4 - (HEAD -> master) Add .gitignore (6 seconds ago) <AleksandrHovhannisyan>
    * 9ed001a - Add README (6 seconds ago) <AleksandrHovhannisyan>
    * 0beebfb - Add package.json (50 minutes ago) <AleksandrHovhannisyan>

    注意,在已刪除提交之后的所有提交哈希都將被重新計算。因此,雖然根提交仍保持為 0beebfb,但在它之后的所有哈希值都已更改。正如現在已經看到幾次,如果之前將此分支推送到了遠程倉庫中,那么本地分支和遠程分支現在將不同步。因此,只需要進行一次強制推送即可更新遠程分支:

    git push -f

    改寫提交消息

    我們再來添加兩個提交,提交消息是隨便寫的:

    * 094f8cb - (HEAD -> master) Do more stuff (1 second ago) <AleksandrHovhannisyan>
    * 74dab36 - Do something idk (59 seconds ago) <AleksandrHovhannisyan>
    * 11221d4 - Add .gitignore (3 minutes ago) <AleksandrHovhannisyan>
    * 9ed001a - Add README (3 minutes ago) <AleksandrHovhannisyan>
    * 0beebfb - Add package.json (53 minutes ago) <AleksandrHovhannisyan>

    現在想修改這兩個提交消息。我們將從交互式變基開始。在這里,我們將針對最后兩個提交:

    git rebase -i HEAD~2

    這將打開編輯器:

    pick 74dab36 Do something idk
    pick 094f8cb Do more stuff

    現在,只需將任何要更改其消息的提交的 pick 替換為 r(或 reword):

    reword 74dab36 Do something idk
    reword 094f8cb Do more stuff

    關閉并保存文件,對于想要改寫的每個提交,git 將打開編輯器,就像正在修改該提交一樣,允許編輯消息。

    也許在第一次提交時這樣做:

    Update README with getting started instructions
    
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    #
    # Date:      Sun Oct 11 09:17:41 2022 -0400
    #
    # interactive rebase in progress; onto 11221d4
    # Last command done (1 command done):
    #    reword 74dab36 Do something idk
    # Next command to do (1 remaining command):
    #    reword 094f8cb Do more stuff
    # You are currently editing a commit while rebasing branch 'master' on '11221d4'.
    #
    # Changes to be committed:
    #       modified:   README.md
    #

    第二次這樣做:

    Add name and author to package.json
    
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    #
    # interactive rebase in progress; onto 11221d4
    # Last commands done (2 commands done):
    #    reword 74dab36 Do something idk
    #    reword 094f8cb Do more stuff
    # No commands remaining.
    # You are currently rebasing branch 'master' on '11221d4'.
    #
    # Changes to be committed:
    #       modified:   package.json
    #

    我們會得到以下輸出確認:

    [detached HEAD 665034d] Update README with getting started instructions
     Date: Sun Oct 11 09:17:41 2020 -0400
     1 file changed, 5 insertions(+)
    [detached HEAD ba88fb0] Add name and author to package.json
     1 file changed, 4 insertions(+), 1 deletion(-)
    Successfully rebased and updated refs/heads/master.

    現在提交歷史看起來像這樣:

    * ba88fb0 - (HEAD -> master) Add name and author to package.json (31 seconds ago) <AleksandrHovhannisyan>
    * 665034d - Update README with getting started instructions (53 seconds ago) <AleksandrHovhannisyan>
    * 11221d4 - Add .gitignore (6 minutes ago) <AleksandrHovhannisyan>
    * 9ed001a - Add README (6 minutes ago) <AleksandrHovhannisyan>
    * 0beebfb - Add package.json (56 minutes ago) <AleksandrHovhannisyan>

    編輯舊提交

    編輯提交就意味著在提交之后立即轉到歷史記錄中的那個點。這允許修改提交并包含(或刪除)想要的任何更改。

    目前為止,我們有如下提交歷史:

    * ba88fb0 - (HEAD -> master) Add name and author to package.json (31 seconds ago) <AleksandrHovhannisyan>
    * 665034d - Update README with getting started instructions (53 seconds ago) <AleksandrHovhannisyan>
    * 11221d4 - Add .gitignore (6 minutes ago) <AleksandrHovhannisyan>
    * 9ed001a - Add README (6 minutes ago) <AleksandrHovhannisyan>
    * 0beebfb - Add package.json (56 minutes ago) <AleksandrHovhannisyan>

    假設要編輯根提交(0beebfb)并添加第二個文件:

    touch .yarnrc

    我們將針對該提交使用交互式變基,在這種編輯根提交的特殊情況下,需要使用 --root 選項:

    git rebase -i --root

    這將打開編輯器,按時間順序顯示提交:

    pick 0beebfb Add package.json
    pick 9ed001a Add README
    pick 11221d4 Add .gitignore
    pick 665034d Update README with getting started instructions
    pick ba88fb0 Add name and author to package.json

    我們需要做的就是為該列表中的第一個提交將 pick 替換為 edit :

    edit 0beebfb Add package.json
    pick 9ed001a Add README
    pick 11221d4 Add .gitignore
    pick 665034d Update README with getting started instructions
    pick ba88fb0 Add name and author to package.json

    關閉并保存文件,應該從 git 中看到這條消息:

    Stopped at 0beebfb... Add package.json
    You can amend the commit now, with
    
            git commit --amend
    
    Once you are satisfied with your changes, run
    
            git rebase --continue

    下面來運行這兩個命令:

    git add .yarnrc && git commit --amend

    現在只需要修改提交,編輯器應如下所示:

    Add package.json
    
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    #
    # Date:      Sun Oct 11 08:25:57 2020 -0400
    #
    # interactive rebase in progress; onto 666364d
    # Last command done (1 command done):
    #    edit 0beebfb Add package.json
    # Next commands to do (4 remaining commands):
    #    pick 9ed001a Add README
    #    pick 11221d4 Add .gitignore
    # You are currently editing a commit while rebasing branch 'master' on '666364d'.
    #
    #
    # Initial commit
    #
    # Changes to be committed:
    #       new file:   .yarnrc
    #       new file:   package.json
    #

    現在將該消息更改為 Initialize npm package 保存并退出。現在,根據 git 的建議,需要繼續 rebase:

    git rebase --continue

    現在,提交歷史現在看起來像這樣:

    * 436e421 - (HEAD -> master) Add name and author to package.json (6 seconds ago) <AleksandrHovhannisyan>
    * beb7c13 - Update README with getting started instructions (6 seconds ago) <AleksandrHovhannisyan>
    * 1c75f66 - Add .gitignore (6 seconds ago) <AleksandrHovhannisyan>
    * 69c997b - Add README (6 seconds ago) <AleksandrHovhannisyan>
    * 36210ec - Initialize npm package (56 seconds ago) <AleksandrHovhannisyan>

    壓縮

    壓縮可以將 n 個提交合并為一個,使提交歷史更加緊湊。如果一個功能分支引入大量提交,并且只希望該功能在歷史記錄中表示為單個提交(稱為 squash-and-rebase 工作流),這有時很有用。但是,如果將來需要,將無法恢復或修改舊的提交,這在某些情況下可能是不可取的。

    同樣,作為參考,我們有如下提交歷史:

    * 436e421 - (HEAD -> master) Add name and author to package.json (6 seconds ago) <AleksandrHovhannisyan>
    * beb7c13 - Update README with getting started instructions (6 seconds ago) <AleksandrHovhannisyan>
    * 1c75f66 - Add .gitignore (6 seconds ago) <AleksandrHovhannisyan>
    * 69c997b - Add README (6 seconds ago) <AleksandrHovhannisyan>
    * 36210ec - Initialize npm package (56 seconds ago) <AleksandrHovhannisyan>

    下面來創建一個功能分支并添加一些提交:

    git checkout -b feature && \
    touch file1 && git add . && git commit -m "Add file1" && \
    touch file2 && git add . && git commit -m "Add file2" && \
    touch file3 && git add . && git commit -m "Add file3"

    現在提交歷史如下:

    * 6afa3ac - (HEAD -> feature) Add file3 (4 seconds ago) <AleksandrHovhannisyan>
    * c16cbc6 - Add file2 (4 seconds ago) <AleksandrHovhannisyan>
    * 0832e96 - Add file1 (4 seconds ago) <AleksandrHovhannisyan>
    * 436e421 - (master) Add name and author to package.json (12 minutes ago) <AleksandrHovhannisyan>
    * beb7c13 - Update README with getting started instructions (12 minutes ago) <AleksandrHovhannisyan>
    * 1c75f66 - Add .gitignore (12 minutes ago) <AleksandrHovhannisyan>
    * 69c997b - Add README (12 minutes ago) <AleksandrHovhannisyan>
    * 36210ec - Initialize npm package (12 minutes ago) <AleksandrHovhannisyan>

    我們可以使用以下命令將所有這些壓縮為一個:

    git rebase -i master

    這會將功能分支重新設置為 master 分支。請注意, master 是對特定提交的引用,就像其他任何提交一樣:

    * 436e421 - (HEAD -> master) Add name and author to package.json (6 seconds ago) <AleksandrHovhannisyan>

    這樣做也是一樣的:

    git rebase -i 436e421

    無論如何,一旦運行了這些命令中的任何一個,git 就會打開編輯器:

    pick 0832e96 Add file1
    pick c16cbc6 Add file2
    pick 6afa3ac Add file3

    我們會將最后兩個提交壓縮到第一個提交中,所以將它們的 pick 命令更改為 squash

    pick 0832e96 Add file1
    squash c16cbc6 Add file2
    squash 6afa3ac Add file3

    保存并退出,git 將打開編輯器,通知我們將要合并三個提交:

    # This is a combination of 3 commits.
    # This is the 1st commit message:
    
    Add file1
    
    # This is the commit message #2:
    
    Add file2
    
    # This is the commit message #3:
    
    Add file3
    
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    #
    # Date:      Sun Oct 11 09:37:05 2020 -0400
    #
    # interactive rebase in progress; onto 436e421
    # Last commands done (3 commands done):
    #    squash c16cbc6 Add file2
    #    squash 6afa3ac Add file3
    # No commands remaining.
    # You are currently rebasing branch 'feature' on '436e421'.
    #
    # Changes to be committed:
    #       new file:   file1
    #       new file:   file2
    #       new file:   file3
    #

    現在可以將 Add file1 更改為 Add files 1、2 和 3,或者想要的任何其他提交消息。保存并關閉文件,現在提交歷史已經很緊湊了:

    * b646cf6 - (HEAD -> feature) Add files 1, 2, and 3 (70 seconds ago) <AleksandrHovhannisyan>
    * 436e421 - (master) Add name and author to package.json (14 minutes ago) <AleksandrHovhannisyan>
    * beb7c13 - Update README with getting started instructions (14 minutes ago) <AleksandrHovhannisyan>
    * 1c75f66 - Add .gitignore (14 minutes ago) <AleksandrHovhannisyan>
    * 69c997b - Add README (14 minutes ago) <AleksandrHovhannisyan>
    * 36210ec - Initialize npm package (15 minutes ago) <AleksandrHovhannisyan>

    4. 還原提交

    上面學習了兩種從 git 歷史記錄中刪除提交的方法:

    • 在要刪除的提交范圍之前,將 HEAD 指針軟或硬重置為提交。
    • 對不想保留的任何提交執行交互式變基并更改 pickdrop

    不幸的是,這兩種方法都會重寫提交歷史。以使用交互式變基從 master 分支中刪除 .env 文件為例。如果在現實中這樣做,在像 master 這樣的共享分支上刪除提交會導致一些麻煩,團隊中的每個人都必須硬重置本地的 master 分支以匹配 origin/master

    問題出現在人們正在進行功能分支上的工作時,特別是如果他們是從舊的 master 分支切出來的——刪除的文件仍然存在。變基就是行不通的,因為它可能會重新引入在 master 分支上刪除的文件;同樣地,將 master 分支合并到功能分支中也不起作用,因為 git 沒有公共歷史可供解決:

    fatal: refusing to merge unrelated histories

    這就是 git revert 出現的原因。與通過變基或硬/軟重置刪除提交不同,revert 命令創建一個新提交以撤消目標提交引入的任何更改:

    git revert <hash-id>

    假設在 master 分支上,想要用 beb7c13 的哈希恢復提交:

    * 436e421 - (HEAD -> master) Add name and author to package.json (8 hours ago) <AleksandrHovhannisyan>
    * beb7c13 - Update README with getting started instructions (8 hours ago) <AleksandrHovhannisyan>
    * 1c75f66 - Add .gitignore (8 hours ago) <AleksandrHovhannisyan>
    * 69c997b - Add README (8 hours ago) <AleksandrHovhannisyan>
    * 36210ec - Initialize npm package (8 hours ago) <AleksandrHovhannisyan>

    為此,執行以下命令:

    git revert beb7c13

    Git 將打開編輯器:

    Revert "Update README with getting started instructions"
    
    This reverts commit beb7c132882ff1e3214dbd380514559fed0ef38f.
    
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    #
    # On branch master
    # Changes to be committed:
    #       modified:   README.md
    #

    保存并關閉文件,然后運行 git log 以查看歷史記錄:

    * e1e6e06 - (HEAD -> master) Revert "Update README with getting started instructions" (58 seconds ago) <AleksandrHovhannisyan>
    * 436e421 - Add name and author to package.json (8 hours ago) <AleksandrHovhannisyan>
    * beb7c13 - Update README with getting started instructions (8 hours ago) <AleksandrHovhannisyan>
    * 1c75f66 - Add .gitignore (8 hours ago) <AleksandrHovhannisyan>
    * 69c997b - Add README (8 hours ago) <AleksandrHovhannisyan>
    * 36210ec - Initialize npm package (8 hours ago) <AleksandrHovhannisyan>

    注意,原始提交仍然存在于歷史記錄中,并且其哈希值得以保留。唯一改變的是在分支的頂部添加了一個新的提交,以還原此前提交所引入的更改,就好像手動刪除了最初引入的更改。顯然,使用 git revert 比手工操作更合理。

    因此,與交互式變基或重置相比,撤銷提交會引入額外的一個提交,因此會更加混亂。但這并不是非常重要的問題。而且,好處在于,它不會破壞公共分支。

    5. 簽出文件

    git checkout 命令是另一種撤消 git 更改的基本方法。它有三個目的:

    • 創建新分支:git checkout -b <newBranch>
    • 切換到分支或提交:git checkout <existingBranch>
    • 恢復不同版本的文件。

    這里我們將重點關注第三個目的。如果對本地文件進行了未暫存的更改,則可以使用 checkout 命令輕松撤銷這些更改:

    git checkout <pathspec>

    這里,<pathspec> 可以是任何有效的路徑說明符,例如:. 對于當前目錄、path/to/filefile.extension,甚至是正則表達式。

    這將清除對指定文件的所有未暫存更改并恢復當前分支的文件的未修改版本。此命令不會影響暫存文件——只會清除未暫存的更改。

    例如,如果想清除當前目錄中所有未暫存的更改并從頭開始,最簡單的方法是使用 git checkout 命令和 . 作為路徑規范:

    git checkout .

    我們也可以使用 git checkout 來恢復文件的本地或遠程版本。例如,可以簽出遠程 master分支上的某個文件:

    git checkout origin/master -- <pathspec>

    這個命令的作用是將遠程分支 origin/master 上指定的文件 <pathspec> 簽出到本地分支上。該命令會用遠程分支上的文件覆蓋本地分支上的同名文件,即用遠程分支的版本替換本地分支的版本,從而確保本地分支與遠程分支保持同步。

    同樣,也可以簽出另一個本地分支上的某個文件:

    git checkout localBranchName -- <pathspec>

    6. 使用 Git Reflog

    可以將 reflog 視為 git 的 git — 就像一個內部記錄保存系統,可以跟蹤大部分操作。

    reflog 代表“參考日志”:HEAD 指針隨時間的不同狀態的一系列快照。這意味著任何時候引入、刪除或修改提交,或者簽出新分支,或者重寫舊提交的哈希,這些更改都將記錄在 reflog 中。我們將能夠回到過去撤消可能不需要的更改,即使它們看似不可逆轉。

    查看 Git 倉庫的 reflog 的方式如下:

    git reflog

    例如,在功能分支上可以簽出一個新分支,git 將記錄該活動:

    git checkout -b feature2

    Reflog:

    b646cf6 (HEAD -> feature2, origin/feature, feature) HEAD@{0}: checkout: moving from feature to feature2

    這是因為 HEAD 指針從功能分支的首端重定向到新分支 feature2 的首端。

    如果深入挖掘 reflog,還可以查看本文中的所有更改:

    b646cf6 (HEAD -> feature2, origin/feature, feature) HEAD@{0}: checkout: moving from feature to feature2
    b646cf6 (HEAD -> feature2, origin/feature, feature) HEAD@{1}: rebase -i (finish): returning to refs/heads/feature
    b646cf6 (HEAD -> feature2, origin/feature, feature) HEAD@{2}: rebase -i (squash): Add files 1, 2, and 3
    f3def0a HEAD@{3}: rebase -i (squash): # This is a combination of 2 commits.
    0832e96 HEAD@{4}: rebase -i (start): checkout 436e421
    6afa3ac HEAD@{5}: commit: Add file3
    c16cbc6 HEAD@{6}: commit: Add file2
    0832e96 HEAD@{7}: commit: Add file1
    436e421 (master) HEAD@{8}: checkout: moving from master to feature
    436e421 (master) HEAD@{9}: rebase -i (finish): returning to refs/heads/master
    436e421 (master) HEAD@{10}: rebase -i (pick): Add name and author to package.json
    beb7c13 HEAD@{11}: rebase -i (pick): Update README with getting started instructions
    1c75f66 HEAD@{12}: rebase -i (pick): Add .gitignore
    69c997b HEAD@{13}: rebase -i (pick): Add README
    36210ec HEAD@{14}: commit (amend): Initialize npm package
    04ba759 HEAD@{15}: rebase -i (edit): Add package.json
    2bef9d4 HEAD@{16}: rebase -i (edit): Add package.json
    666364d HEAD@{17}: rebase -i (start): checkout 666364da6703fc41e23515b1777de5ac84c8ad5e
    ba88fb0 HEAD@{18}: rebase -i (finish): returning to refs/heads/master
    ba88fb0 HEAD@{19}: rebase -i (reword): Add name and author to package.json
    665034d HEAD@{20}: rebase -i (reword): Update README with getting started instructions
    74dab36 HEAD@{21}: rebase -i: fast-forward
    11221d4 HEAD@{22}: rebase -i (start): checkout HEAD~2
    094f8cb HEAD@{23}: commit: Do more stuff
    74dab36 HEAD@{24}: commit: Do something idk
    11221d4 HEAD@{25}: rebase -i (finish): returning to refs/heads/master
    11221d4 HEAD@{26}: rebase -i (pick): Add .gitignore
    9ed001a HEAD@{27}: rebase -i (pick): Add README
    0beebfb HEAD@{28}: rebase -i (start): checkout 2beb7c7^
    7598875 HEAD@{29}: reset: moving to HEAD~1
    b494f6f HEAD@{30}: commit: Add a file
    7598875 HEAD@{31}: commit (amend): Add .gitignore
    4753e23 HEAD@{32}: commit: Add .gitignore
    893d18d HEAD@{33}: commit: Add README
    2beb7c7 HEAD@{34}: commit: Add .env
    0beebfb HEAD@{35}: commit (initial): Add package.json

    可以通過檢查這些提交哈希來快速查看這些狀態中的任何一個:

    git checkout <hash-id>

    或者,可以將分支重置為歷史記錄中的某個點:

    git reset --soft 7598875

    這將當前的 feature2 分支軟重置為以下歷史:

    * 7598875 - (HEAD -> feature2) Add .gitignore (84 minutes ago) <AleksandrHovhannisyan>
    * 893d18d - Add README (85 minutes ago) <AleksandrHovhannisyan>
    * 2beb7c7 - Add .env (85 minutes ago) <AleksandrHovhannisyan>
    * 0beebfb - Add package.json (85 minutes ago) <AleksandrHovhannisyan>

    甚至可以運行另一個 reflog 來查看更改:

    7598875 (HEAD -> feature2) HEAD@{0}: reset: moving to 7598875

    如果不希望本地分支被覆蓋,可以再次運行 reflog 命令并將分支重置到在執行該操作之前的 HEAD

    git reset --hard b646cf6

    如果不希望本地分支被覆蓋,可以再次運行 reflog 命令并將分支重置到在執行該操作之前的 HEAD

    git reset --hard b646cf6

    這就回到了之前的狀態:

    * b646cf6 - (HEAD -> feature2, origin/feature, feature) Add files 1, 2, and 3 (13 minutes ago) <AleksandrHovhannisyan>
    * 436e421 - (master) Add name and author to package.json (26 minutes ago) <AleksandrHovhannisyan>
    * beb7c13 - Update README with getting started instructions (26 minutes ago) <AleksandrHovhannisyan>
    * 1c75f66 - Add .gitignore (26 minutes ago) <AleksandrHovhannisyan>
    * 69c997b - Add README (26 minutes ago) <AleksandrHovhannisyan>
    * 36210ec - Initialize npm package (27 minutes ago) <AleksandrHovhannisyan>

    Git 的 reflog 命令很有用,以防進行硬重置并丟失所有工作,只需查看 reflog 并重置到進行硬重置之前的點,就輕松搞定!

    最后,如果出于某種原因想清理 reflog,可以使用以下方法從中刪除行:

    git reflog delete HEAD@{n}

    n 替換為要從 reflog 中刪除的任何行。HEAD@{0} 指的是 reflog 中的最新行,HEAD@{1} 指的是之前的一行,依此類推。

    參考:6 Ways to Undo Changes in Git | Aleksandr Hovhannisyan

    ?現在我們所使用的Windows10系統總是自動更新比較麻煩,今天小編就給大家分享如何解決這一類問題。

    一、如何關閉系統自動更新

    操作流程:鼠標右擊此電腦,點擊管理,出現列表找到服務點擊后,找到Windows Update右擊屬性,啟動類型改為禁用,然后確定。下圖:

    二、重置電腦

    操作步驟:按快捷鍵Win+I打開設置界面,點擊更新和安全,點擊恢復,重置此電腦,按開始按鈕。


    三、定期清理垃圾

    很多時候電腦運行慢可能是系統垃圾太多,需要養成定期清理的習慣,打開電腦安裝的360衛士或者電腦管家,直接全面檢測清理垃圾即可。這樣可以讓你電腦運行帶來不一樣的速度。

    四、常用的快捷鍵

    Ctrl+S?保存??Ctrl+W?關閉程序??Ctrl+N?新建??Ctrl+O?打開??Ctrl+Z?撤銷 Ctrl+F?查找??Ctrl+X?剪切??Ctrl+C?復制??Ctrl+V?粘貼??Ctrl+A?全選 Ctrl+[?縮小文字??Ctrl+]?放大文字??Ctrl+B?粗體??Ctrl+I?斜體??Ctrl+U?下劃線??Ctrl+Shift?輸入法切換??Ctrl+空格?中英文切換?Ctrl+Home?光標快速移到文件頭??Ctrl+End?光標快速移到文件尾??Ctrl+Esc?顯示開始菜單??Ctrl+Shift+<?快速縮小文字??Ctrl+Shift+>?快速放大文字 Ctrl+F5?在IE中強行刷新??Ctrl+拖動文件?復制文件

    以上方法希望能為大家帶了很大的幫助,接下來小編為大家推薦一款非常好用的辦公電腦,為你提供參考。不管你是想要輕便的商務本,下文的推薦列表中都會有適合職場新人和大學生的輕薄本——聯想小新Air14 輕薄本。



    聯想小新Air14簡約藝術的設計風格,符合當下的時尚潮流,頗受年輕人青睞。它擁有著質感出眾的鋁合金機身,堅固耐用,控制重量的同時加強了機身導熱散熱性能。A面居中的聯想Logo,具有科技感的亮面設計,視覺上更顯精致高級。B面則是三窄邊設計,82.7%高占比也帶來了更強烈的視覺沖擊,還有1920x1080高分辨率加上72%NTSC高色域的全高清IPS屏,加上CD兩面棱角分明的線條和B&O音箱處的菱格紋理設計,盡顯科技與美學碰撞的藝術感。



    聯想小新Air 14具備了15.9mm、1.5kg的厚度和重量,14英寸的 聯想小新Air14絕對稱得上輕薄,其長寬與A4紙相仿,讓你輕松攜帶方便通勤。此外,它在輕薄本中相對豐富的接口設計,也省去了你購置轉接線材的煩惱——兩個USB type-A接口、一個SD讀卡器、3.5mm耳麥接口,HDMI接口,以及一個全功能USB type-C,組合實用,一步到位。



    除了輕薄機身和豐富接口,小新Air 14的強大的續航能力也為越來越多職場年輕族群移動辦公、外出差旅的使用需求提供了便利。它配備了一塊50Whr的大容量電池,最長可支持10小時的續航時間,可以省去隨身攜帶適配器的麻煩。同時,小新Air 14還支持快充技術,充電一刻鐘,使用兩小時,靈活又高效,讓你 “滿血” 應對一整天的工作。



    有全新十代酷睿處理器的加持,讓小新Air 14具備了不俗的性能表現。它搭載英特爾酷睿i5-10210U處理器,可支持DDR4 雙通道的內存,較前代更高的內存頻率給用戶更快的運行體驗,助力高效辦公拒絕卡頓。配合 MX250獨顯,讓小新Air 14釋放出更強的源動力,無論是處理高清圖片還是視頻剪輯,也都能出色兼顧。

    不僅于此,B&O調校揚聲器展現出色的聲場和沉浸感;扶梯式的翹臀轉軸設計和大面積散熱口提升散熱效率;72% sRGB色域高屏占比屏幕帶來沉浸的視覺體驗……影音娛樂、輕度游戲都能勝任,體驗更出眾。


    作為一款全能型的輕薄本, 小新Air 14也適當加入了商務設計,適合在工作生活之間無縫切換的大學生。它配備了按壓式指紋識別傳感器,輕輕一觸即可登陸,快速投入學習和辦公,安全高效。搭載BIOS智能恢復解決方案,有效預防文件損壞,保證用戶資料的安全。防窺攝像頭設計,物理電子開關輕輕一撥,即可關閉攝像頭使用權限,拒絕任何用戶和程序訪問,保護私密。


    以上就是我為大家分享的超詳細筆記本電腦選購指南,更好的為新手小白引導正確推送筆記本的,其實電腦來說,根據自己的核心需求和消費能力選擇筆記本才是最好的,滿足日常所需就可以了。

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有