gpt4 book ai didi

git - 如何 git reset --hard 一个子目录

转载 作者:IT王子 更新时间:2023-10-29 01:17:16 25 4
gpt4 key购买 nike

UPDATE²: With Git 2.23 (August 2019), there's a new command git restore that does this, see the accepted answer.

UPDATE: This will work more intuitively as of Git 1.8.3, see my own answer.

想象一下以下用例:我想删除我的 Git 工作树的特定子目录中的所有更改,而保留所有其他子目录不变。

此操作的正确 Git 命令是什么?

下面的脚本说明了这个问题。在 How to make files 注释下方插入正确的命令——当前命令将恢复文件 a/c/ac,该文件应该被稀疏 checkout 排除。请注意,我不想显式恢复a/aa/b,我只“知道”a 并想恢复下面的所有内容。 编辑:而且我也“不知道”b,或者哪些其他目录与a 位于同一级别。

#!/bin/sh

rm -rf repo; git init repo; cd repo
for f in a b; do
for g in a b c; do
mkdir -p $f/$g
touch $f/$g/$f$g
git add $f/$g
git commit -m "added $f/$g"
done
done
git config core.sparsecheckout true
echo a/a > .git/info/sparse-checkout
echo a/b >> .git/info/sparse-checkout
echo b/a >> .git/info/sparse-checkout
git read-tree -m -u HEAD
echo "After read-tree:"
find * -type f

rm a/a/aa
rm a/b/ab
echo >> b/a/ba
echo "After modifying:"
find * -type f
git status

# How to make files a/* reappear without changing b and without recreating a/c?
git checkout -- a

echo "After checkout:"
git status
find * -type f

最佳答案

使用 Git 2.23(2019 年 8 月),您拥有 new command git restore (还有 presented here)

git restore --source=HEAD --staged --worktree -- aDirectory
# or, shorter
git restore -s@ -SW -- aDirectory

这会将索引和工作树都替换为 HEAD内容,如 reset --hard会,但对于特定路径。


原始答案(2013 年)

请注意(如 commented by Dan Fabulich ):

  • git checkout -- <path>不进行硬重置:它将工作树内容替换为暂存内容。
  • git checkout HEAD -- <path>对路径进行硬重置,用 HEAD 中的版本替换索引和工作树 promise 。

作为answered通过 Ajedi32 , 两个 checkout 表单都不删除在目标修订中删除的文件
如果工作树中有额外的文件,但 HEAD 中不存在,则 git checkout HEAD -- <path>不会删除它们。

注意:使用 git checkout --overlay HEAD -- <path> (Git 2.22, Q1 2019) , 出现在索引和工作树中但不在 <tree-ish> 中的文件被删除,使它们匹配 <tree-ish>正是。

但是 checkout 可以尊重 git update-index --skip-worktree (对于那些你想忽略的目录),如“Why do excluded files keep reappearing in my git sparse checkout?”中所述。

关于git - 如何 git reset --hard 一个子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15404535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com