簡體   English   中英

撤消最近在git bash上觸發的“ git add”命令

[英]Undo recent “git add .” command fired on git bash

我錯誤地做了git add . 現在,我在暫存區中有多個文件。 我知道我可以使用git reset撤消文件,但這將花費我的大部分時間。

我正在尋找可以節省時間的解決方案。 現在我想知道

  • 有沒有一種方法可以撤消最后的git add . 命令在git上觸發。 這樣我就不必多次執行git reset file

  • 如果上述方法不可行,那么有一種方法可以使用單個命令重置多個文件。

你已經上演你想保留籌備的文件,或者你願意擁有的所有文件回到完全不分級的?

后者非常簡單:如galath所評論的 ,使用git reset帶任何其他參數。 這會執行--mixed重置:

  • 將當前分支移至指定的提交,但不進行命名提交,這意味着將當前分支移至HEAD ,而HEAD是當前提交,因此我們將當前提交移至其自身,不執行任何操作; 然后
  • 用命名提交中的版本替換索引中的文件(同樣,我們沒有命名,所以這是HEAD提交)。

(這兩個步驟是--soft--mixed部分;如果沒有--hard ,則git reset 跳過擦除工作樹更改的第三步。顯然,您不希望刪除這些內容,因此不應使用--hard 。)

前者更難。 要獲取所有暫存文件的列表,請使用:

git diff --cached --name-only

如果要有選擇地重設大多數(但不是全部)文件,則可以將這些文件名寫入文件(最好是在工作樹之外),例如/tmp/list ,然后編輯該文件以刪除名稱您想繼續上演。 然后:

git reset -- $(cat /tmp/list)

要么:

xargs git reset -- < /tmp/list

在每個路徑名上運行git reset -- 假設文件名中沒有空格; 如果存在,請使用其他shell技巧來僅在換行符處斷開(假設路徑名中沒有換行符)。

如果你一直在小心翼翼地上演一些但不是所有使用某些文件的git add -p ,通常可以收回這些使用git fsck --lost-found ,並通過所有產生的“晃來晃去斑點”戳,但是這是很不值得的努力。

看來這應該工作: git reset -p <file_name>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM