簡體   English   中英

如何“git ls”文件被git標記為“由我們刪除”

[英]Howto "git ls" files marked by git as "deleted by us"

我開始使用 git cherrypick; 因此,我現在(經常)面臨這樣的情況,這些情況給了我很多標記為“被我們刪除”的文件。

我看到了另一個問題,其中提到了如何使用git ls-files --deleted來獲取平面文件列表; 然后可以通過管道傳輸到 xargs rm。

問題是:--deleted 沒有列出那些“被我們刪除”的文件。

所以,長話短說:刪除“被我們刪除”文件的最簡單/直接的方法是什么?

(我真的很喜歡 git ls-files 方法;因為它不需要 sed/awk 魔法;所以也不必擔心正確使用引號......)

更新; 只是為了解釋為什么這不是一些“XY 問題”的情況:

  • 實際上我正在使用 git svn; 連接到一些后端 SVN 服務器
  • SVN 主干包含目錄 A、B、C
  • 我正在對影響所有三個目錄的主干進行更改
  • 但是:我運行cherry-pick的git ...實際上類似於在SVN服務器上創建的“產品分支”。 這些“產品”分支只包含子集(所以一個有 A 和 B;另一個有 B 和 C)。
  • 我努力了; 但我真的無法同時創建一個包含 SVN 主干和 SVN 產品分支的 git svn clone

我不知道像這樣的“簡單”命令,但你可以使用git status本身。

while read -d '' status file; do
    case "$status" in
        (D?)
            echo "Removing $file that was deleted by us."
            #rm "./$file"
            ;;
    esac
    #printf 'status: %q\nfilename: %q\n' "$status" "$file"
done < <(git status -sz)

只匹配DU而不匹配D? (D 單字符) 適當更改大小寫模式。

要僅運行rm一次,請在if塊中使用files+=("$file") ,然后在最后使用rm "${files[@]}"

要列出標記為“由我們刪除”的未合並文件,可以使用以下命令:

git status --porcelain --untracked-files=no | sed --silent 's/^DU //p'

或稍短的變體:

git status --porcelain -uno | sed -n 's/^DU //p'

在命令git status --porcelain的輸出中, git status --porcelain合並的“被我們刪除”文件用DU標記。

sed ,除非明確要求,否則選項-n禁止打印,命令s/X/Y/s/X/Y/替換 X(正則表達式),並且由於標志p會打印修改后的行。

暫無
暫無

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

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