标签: git-reset

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

更新:从Git 1.8.3开始,这将更直观地工作,请参阅我自己的答案.

想象一下以下用例:我想摆脱我的Git工作树的特定子目录中的所有更改,保留所有其他子目录.

什么是适合此操作的Git命令?

下面的脚本说明了这个问题.在How to make files注释下面插入适当的命令- 当前命令将恢复a/c/ac应该由稀疏检出排除的文件.请注意,我希望明确恢复a/aa/b,我只"知道" a,并希望下面恢复一切.编辑:我也不"知道" b,或者与其他目录位于同一级别a.

#!/bin/sh

rm -rf repo; git init repo; cd repo
for f in a b; do …
Run Code Online (Sandbox Code Playgroud)

git reset sparse-checkout git-reset

178
推荐指数
7
解决办法
12万
查看次数

撤消"git add <dir>"?

我使用命令"git add dir"错误地添加了文件.我还没有运行"git commit".有没有办法从提交中删除此目录及其中包含的所有内容?

我试过了git reset dir,但没用.显然git reset file是撤消它的方法.但是我有这么多文件,所以时间很少.

git git-reset

171
推荐指数
4
解决办法
6万
查看次数

"git rm --cached x"vs"git reset head - x"?

GitRef.org - 基础:

git rm将从暂存区域中删除条目.这与git reset HEAD"unstages"文件有点不同.通过"unstage"我的意思是它将暂存区域恢复到我们开始修改之前的状态. git rm另一方面,只需将文件完全从舞台上踢出,这样它就不会包含在下一个提交快照中,从而有效地删除它.

默认情况下,a git rm file将完全从暂存区域中删除文件,也将从磁盘>(工作目录)中删除.要将文件保留在工作目录中,您可以使用git rm --cached.

但究竟是什么区别git rm --cached asdgit reset head -- asd

git git-reset git-index git-rm

149
推荐指数
3
解决办法
18万
查看次数

如何将HEAD移回以前的位置?(独立头)和撤消提交

在git中,我试图squash commit通过合并另一个分支然后HEAD通过以下方式重置到上一个位置:

git reset origin/master
Run Code Online (Sandbox Code Playgroud)

但我需要走出这一步.如何将HEAD移回上一个位置?

我有23b6772提交的SHA1 frag(),我需要将其移动到.
我怎样才能回到这个提交?

git git-revert git-checkout git-reset git-reflog

141
推荐指数
4
解决办法
17万
查看次数

为什么git不能通过路径进行硬/软复位?

$ git reset -- <file_path> 可以通过路径重置.

但是,$ git reset (--hard|--soft) <file_path>会报告如下错误:

Cannot do hard|soft reset with paths.
Run Code Online (Sandbox Code Playgroud)

git git-reset

123
推荐指数
5
解决办法
6万
查看次数

什么是“git restore”命令,“git restore”和“git reset”有什么区别?

当我想取消暂存文件时,我所有的 Git 教程都显示如下内容:

$ git add *
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    renamed:    README.md -> README
    modified:   CONTRIBUTING.md
Run Code Online (Sandbox Code Playgroud)

此提示告诉我们git reset用于取消暂存文件。

但是,在我的终端中,我看到:

git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    renamed:    cat.js -> catcat.js
    renamed:    tolendo.gogo -> tolendo.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    readme (copy).md
    tolendo (copy).txt
    zing (copy).html
Run Code Online (Sandbox Code Playgroud)

我的终端告诉我使用,git …

git restore git-reset unstage

107
推荐指数
4
解决办法
8万
查看次数

使用暂存区域中的未提交文件撤消git reset --hard

我正在努力恢复我的工作.我愚蠢地做了git reset --hard,但在那之前我只做过get add .而且没做过git commit.请帮忙!这是我的日志:

MacBookPro:api user$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)

#   modified:   .gitignore
...


MacBookPro:api user$ git reset --hard
HEAD is now at ff546fa added new strucuture for api
Run Code Online (Sandbox Code Playgroud)

git reset --hard在这种情况下可以撤消吗?

git undo git-add git-reset git-commit

102
推荐指数
5
解决办法
5万
查看次数

Git:如何在'git reset'之后重用/保留提交消息?

作为Git用户,我经常遇到这种情况,我需要以一种不适合--amend或不适合rebase -ifixup提交的方式重做一个或多个提交.通常我会做类似的事情

git reset HEAD~1
# hack, fix, hack
git commit -a
# argh .. do I need to retype my message?
Run Code Online (Sandbox Code Playgroud)

我认为合理的撰写提交消息非常严重.它们通常包含较大的文本,其中包含对更改的引用和理由.到目前为止,我对通过未排序git reflog,git log复制和粘贴过程恢复旧提交消息的漫长过程感到非常恼火.

有没有更好的解决这个问题?如果我包含多个提交,它会怎么样?

编辑:经过一番思考之后,我认为我正在寻找的是一些git stash- like功能,用于提交消息,其中fixup/revision提交不合适.

git commit-message commit git-rebase git-reset

88
推荐指数
4
解决办法
1万
查看次数

我需要在我的主分支中弹出并删除"中间"提交.我该怎么做?

例如,在下面的主分支中,我需要删除提交af5c7bf16e6f04321f966b4231371b21475bc4da,这是由于之前的rebase导致的第二个:

commit 60b413512e616997c8b929012cf9ca56bf5c9113
Author: Luca G. Soave <luca.soave@gmail.com>
Date:   Tue Apr 12 23:50:15 2011 +0200

    add generic config/initializers/omniauth.example.rb

commit af5c7bf16e6f04321f966b4231371b21475bc4da
Author: Luca G. Soave <luca.soave@gmail.com>
Date:   Fri Apr 22 00:15:50 2011 +0200

    show github user info if logged

commit e6523efada4d75084e81971c4dc2aec621d45530
Author: Luca G. Soave <luca.soave@gmail.com>
Date:   Fri Apr 22 17:20:48 2011 +0200

    add multiple .container at blueprint layout

commit 414ceffc40ea4ac36ca68e6dd0a9ee97e73dee22
Author: Luca G. Soave <luca.soave@gmail.com>
Date:   Thu Apr 21 19:55:57 2011 +0200

    add %h1 Fantastic Logo + .right for 'Sign …
Run Code Online (Sandbox Code Playgroud)

git github git-rebase git-revert git-reset

87
推荐指数
3
解决办法
3万
查看次数

在有人推送rebase或重置到已发布的分支后,如何恢复/重新同步?

我们都听过一个人应该重订,从未发表的作品,它的危险,等等.但是,我还没有看到张贴如何处理的情况下衍合情况的任何食谱出版.

现在,请注意,只有存储库仅由已知(并且最好是很小)的人群克隆,这才真正可行,这样无论谁推送rebase或重置,都可以通知其他人他们下次需要注意的时候取(!).

如果你没有本地提交foo并且它被重新定位,我看到的一个明显的解决方案将起作用:

git fetch
git checkout foo
git reset --hard origin/foo
Run Code Online (Sandbox Code Playgroud)

foo根据远程存储库,这将简单地抛弃本地状态以支持其历史记录.

但是,如果一个人在该分支机构进行了大量的本地更改,那么如何处理这种情况呢?

git rebase git-rebase git-reset

84
推荐指数
3
解决办法
1万
查看次数