我使用命令错误地将文件添加到 Git :
git add myfile.txt
我还没有执行 git 承诺 。 我如何撤销此操作, 使这些更改不被包含在承诺中 ?
我使用命令错误地将文件添加到 Git :
git add myfile.txt
我还没有执行 git 承诺 。 我如何撤销此操作, 使这些更改不被包含在承诺中 ?
当前回答
要澄清: git 添加从当前工作目录向中转区域( index) 移动到中转区域( index) 的移动 。
这个过程叫做中转。 因此,最自然的指令是 进行修改( 更改过的文件) 。 显而易见的是 :
git stage
git 添加只是 Git 阶段的一种更容易到类型化的别名
可惜没有非舞台或不添加命令。 相关命令更难猜测或记住, 但显而易见:
git reset HEAD --
我们可以很容易地为此创建别名:
git config --global alias.unadd 'reset HEAD --'
git config --global alias.unstage 'reset HEAD --'
最后,我们有了新的命令:
git add file1
git stage file2
git unadd file2
git unstage file1
我个人甚至使用更短的化名:
git a # For staging
git u # For unstaging
其他回答
您想要 :
git rm --cached <added_file_to_undo>
理由:
当我刚开始做这个的时候,我第一次尝试
git reset .
(取消我最初添加的全部内容), 只是为了得到这个(不是这样的)有用信息:
fatal: Failed to resolve 'HEAD' as a valid ref.
结果发现,这是因为 HEAD ref (blanch?) 直到第一次承诺之后才存在。 这就是说,你会遇到跟我一样的初学者的问题, 如果你的工作流程像我的一样, 像是:
cd to my great new project directory to try out Git, the new hotness git init git add . git status ... lots of crap scrolls by ... => Damn, I didn't want to add all of that. google "undo git add" => find Stack Overflow - yay git reset . => fatal: Failed to resolve 'HEAD' as a valid ref.
邮件列表上记录了一个窃听器 记录了这个无益之处
正确的解决方案就在 Git 状态输出中( 是的, 我将它伪装成“ 废话 ” ) 。
... # 将要执行的修改 : # (使用“ git rm -- cashed < file >...” 来取消)...
事实上,解决办法是使用Git rm -- cashed FILE。
在此注意其它处的警告 - git rm 删除您本地的文件工作副本, 但如果您使用 -- cashed , 则不使用。 这是 Git help rm 的结果 :
--cached 使用此选项来卸载和从索引中删除路径。 工作树文件, 不论是否修改, 都会被左移 。
我开始使用
git rm --cached .
以删除所有内容并重新开始。 虽然没有成功, 因为添加. 是循环的, 结果显示 Rm 需要 - r 循环。 叹息 。
git rm -r --cached .
好了,我现在回到我开始的地方。下次我要用...
git add -n .
我把所有东西都拉到一个安全的地方,
撤消一个已经添加的文件很容易使用 Git 。 对于重设已经添加的 my file. txt , 请使用 :
git reset HEAD myfile.txt
解释:
进行不想要的文件后,要撤消,您可以进行 git 重置。头是本地文件的头,而最后一个参数是文件的名称。
我为你们创建了以下图像中的步骤, 更详细地介绍了这些步骤, 包括在这些情况下可能发生的所有步骤:
调
git add -A
用于将所有文件添加到您的承诺( 阶段) 。
git reset
是“ git 添加 - A” 命令的对面。它会删除所有要执行的分阶段文件( 手段已准备就绪 ) 。
类似地,要添加一个特定文件来承诺我们使用 Git 添加 < filename> 的方式相同, 在 unstage( 或重置) 上添加一个我们使用 git 添加的具体文件, 我们使用 git 重置 < filename > 。
git 重置与 git 添加完全相反 。
键入 :
git status
Git会告诉你什么是舞台,等等, 包括关于如何解除舞台的指示:
use "git reset HEAD <file>..." to unstage
我发现吉特做的相当不错 裸体我做正确的事情 在这样的情况下。
注:最近Git版本(1.8.4.x)更改了此电文:
(use "git rm --cached <file>..." to unstage)
吉特拥有每一个可以想象到的行动的指令, 但是它需要广泛的知识才能把事情弄好, 并且因为它充其量是反直觉的...
你以前做过的事:
更改文件并使用 git 添加. , 或 git 添加 < file > 。
你想怎样:
删除索引中的文件, 但保留其版本, 并保留工作副本中未承诺的更改 : git 重置 HEAD < file > 将文件重置为 HEAD 最后一个状态, 撤销更改并将其从索引中删除 : # 思考 ` svn return < file\\ IIRC. git 重置 HEAD < file> git checkout < file > # 如果您有一个像 {file} 这样的\\ 一样的\\ branch}, 使用: git checkout - < file > 这是需要的, 因为 git 重置 -- hard HEAD 将不与单个文件一起工作 。 从索引和版本中删除 < file > , 保留未翻过的文件, 工作副本中的更改 : git rm -cacheed < file > 将 < file > 从工作副本和版本中完全删除: git rm < file > 。