git checkout放弃从子目录运行的更改,并具有整个项目范围?

时间:2019-06-28 07:52:57

标签: git

假设您有一个git repo文件夹,位于/path/to/myrepo_git。假设您已经在工作副本/path/to/myrepo_git/a.txt/path/to/myrepo_git/b.txt/path/to/myrepo_git/subdir/c.txt中进行了更改。

现在,说您要放弃这些更改。如果您位于git repo根目录(此处为/path/to/myrepo_git)中,那么这很简单:

user@PC:/path/to/myrepo_git $ git checkout -- .

但是,如果您位于git repo文件夹的子目录中,我想您首先必须到达git repo的根,然后才能使用git checkout摆脱所有更改,否则git checkout只会删除子目录中的更改-例如,您可以这样做:

user@PC:/path/to/myrepo_git/subdir $ cd "$(git rev-parse --show-toplevel)"
user@PC:/path/to/myrepo_git $ git checkout -- .
user@PC:/path/to/myrepo_git $ cd subdir/  # to go back to where I was before

所以,我的问题是-是否有单个git命令,因此即使我当前在子目录中,我也可以丢弃工作副本中的所有更改(这样,在完成该过程后,我仍然会保留在同一个子目录中?

1 个答案:

答案 0 :(得分:4)

您可以为git checkout命令使用任何路径,所以可以这样做

git checkout -- "$(git rev-parse --show-toplevel)"