是否有一种简单的方法可以放弃所有尚未暂时未提交的变更?
例如,假设A
是跟踪文件,如
% git init -q
% echo "state 1" > A
% git add A && git commit -q -m 'initial commit'
% cat A
state 1
下一个修改A
,并将其分阶段:
% echo "state 2" > A
% git add A
% cat A
state 2
最后,第三次修改A
,但这次A
仍然未分页:
% echo "state 3" > A
% cat A
state 3
如何将A
恢复为分阶段状态,即状态2 。
A
在工作目录和索引中结束的状态。
答案 0 :(得分:2)
假设这是您的工作流程:
您只需要运行git checkout -- A
。这将消除任何未分级的更改,但会在步骤2结束时保留更改。
请查看此示例工作流程,该工作流程将清除:
A的内容只是version1
$ echo "version1" > A
提交更改 $ git add A&& git commit -q -m'initial commit'
$ git log
commit 4fd90642df048ca4beeb29c65c5f7a436e83055a
Author: Tuxdude <foo@bar>
Date: Fri Mar 8 16:28:36 2013 -0800
initial commit
A的内容现在是version2
$ echo "version2" > A
$ cat A
version2
暂存文件更改
$ git add A
检查当前的git状态
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: A
#
对A
$ echo "version3" > A
$ cat A
version3
现在你决定,你要摆脱`A中的本地非分段变化。您只需要从git的缓存中检出文件,即临时区域。
$ git checkout -- A
$ cat A
version2
您可以再次运行git status
,它会让您了解已暂存的更改。
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: A
#
答案 1 :(得分:1)
你必须要做
git checkout -- .
如果要还原单个文件,请执行
git checkout -- myfile
如果已添加文件,则必须通过执行
取消暂存git reset HEAD myfile
答案 2 :(得分:0)
我想到了我的问题的可能答案。它不是特别优雅,我不知道它是否有任何潜在的陷阱,但至少它清楚地显示了我希望A
结束的状态。希望有人会知道一条不那么迂回的路线。
在原始问题中给出的序列之后,执行:
% git stash -q -k
% git stash drop -q
% cat A
state 2