Jac*_*ine 1830 git revert git-checkout
我有一个项目,我跑了git init.几次提交之后,我做了git status哪些告诉我一切都是最新的,并且没有本地更改.
然后我做了几个连续的更改,并意识到我想把所有东西扔掉,然后回到原来的状态.这个命令会为我做吗?
git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)
180*_*ION 3244
如果要还原对工作副本所做的更改,请执行以下操作:
git checkout .
Run Code Online (Sandbox Code Playgroud)
如果要还原对索引所做的更改(即已添加的更改),请执行此操作.警告这会重置你掌握的所有未提交的提交!:
git reset
Run Code Online (Sandbox Code Playgroud)
如果要还原已提交的更改,请执行以下操作:
git revert <commit 1> <commit 2>
Run Code Online (Sandbox Code Playgroud)
如果要删除未跟踪的文件(例如,新文件,生成的文件):
git clean -f
Run Code Online (Sandbox Code Playgroud)
或未跟踪的目录(例如,新的或自动生成的目录):
git clean -fd
Run Code Online (Sandbox Code Playgroud)
Ant*_*bbs 378
注意:您可能还想运行
git clean -fd
Run Code Online (Sandbox Code Playgroud)
如
git reset --hard
Run Code Online (Sandbox Code Playgroud)
将不删除未跟踪文件,其中为git的清洁将从跟踪根目录不在下git的跟踪中删除任何文件.警告 - 小心这个!首先使用git-clean运行干运行是有帮助的,看看它会删除什么.
当您收到错误消息时,这也特别有用
~"performing this command will cause an un-tracked file to be overwritten"
Run Code Online (Sandbox Code Playgroud)
当你和你的朋友都添加了一个同名的新文件时,可能会发生这种情况,一个是更新工作副本,但他首先将它提交到源代码控制中,而你不关心删除未跟踪的副本.
在这种情况下,执行干运行还将帮助显示将被覆盖的文件列表.
Wil*_*ken 118
GIT=$(git rev-parse --show-toplevel)
cd $GIT/..
rm -rf $GIT
git clone ...
Run Code Online (Sandbox Code Playgroud)
.gitignore(如构建文件)中列出的文件/目录.gitignore以下是我每天忘记的其他命令.
git clean --force -d -x
git reset --hard
Run Code Online (Sandbox Code Playgroud)
.gitignore(如构建文件)中列出的文件/目录.gitignoregit clean --force -d -x
Run Code Online (Sandbox Code Playgroud)
.gitignore(如构建文件)中列出的文件/目录.gitignoregit reset --hard
Run Code Online (Sandbox Code Playgroud)
.gitignore(如构建文件)中列出的文件/目录.gitignore用于确认以上所有内容的测试用例(使用bash或sh):
mkdir project
cd project
git init
echo '*.built' > .gitignore
echo 'CODE' > a.sourceCode
mkdir b
echo 'CODE' > b/b.sourceCode
cp -r b c
git add .
git commit -m 'Initial checkin'
echo 'NEW FEATURE' >> a.sourceCode
cp a.sourceCode a.built
rm -rf c
echo 'CODE' > 'd.sourceCode'
Run Code Online (Sandbox Code Playgroud)
也可以看看
git revert 进行撤消先前提交的新提交git checkout 及时返回到先前的提交(可能需要首先运行上面的命令)git stash同git reset上面,但你可以撤消Mic*_*ant 78
如果您想恢复所有更改并且与当前远程主控器保持同步(例如,您发现主HEAD已经向前移动,因为您将其分支并且您的推送被'拒绝')您可以使用
git fetch # will fetch the latest changes on the remote
git reset --hard origin/master # will set your local branch to match the representation of the remote just pulled down.
Run Code Online (Sandbox Code Playgroud)
Wil*_*ell 49
看看git-reflog.它将列出它记住的所有状态(默认为30天),您只需查看所需的状态即可.例如:
$ git init > /dev/null
$ touch a
$ git add .
$ git commit -m"Add file a" > /dev/null
$ echo 'foo' >> a
$ git commit -a -m"Append foo to a" > /dev/null
$ for i in b c d e; do echo $i >>a; git commit -a -m"Append $i to a" ;done > /dev/null
$ git reset --hard HEAD^^ > /dev/null
$ cat a
foo
b
c
$ git reflog
145c322 HEAD@{0}: HEAD^^: updating HEAD
ae7c2b3 HEAD@{1}: commit: Append e to a
fdf2c5e HEAD@{2}: commit: Append d to a
145c322 HEAD@{3}: commit: Append c to a
363e22a HEAD@{4}: commit: Append b to a
fa26c43 HEAD@{5}: commit: Append foo to a
0a392a5 HEAD@{6}: commit (initial): Add file a
$ git reset --hard HEAD@{2}
HEAD is now at fdf2c5e Append d to a
$ cat a
foo
b
c
d
Run Code Online (Sandbox Code Playgroud)
Tob*_*ann 35
DANGER AHEAD :(请阅读评论.执行我的答案中提出的命令可能会删除超出您想要的内容)
彻底删除所有文件,包括我必须运行的目录
git clean -f -d
Run Code Online (Sandbox Code Playgroud)
小智 34
在阅读了大量答案并尝试它们之后,我发现了各种边缘情况,这意味着有时候它们并没有完全清理工作副本.
这是我目前使用的bash脚本,它一直有效.
#!/bin/sh
git reset --hard
git clean -f -d
git checkout -- HEAD
Run Code Online (Sandbox Code Playgroud)
从工作副本根目录运行.
piy*_*vra 34
简单地说
git stash
Run Code Online (Sandbox Code Playgroud)
它将删除你所有的本地chages.你也可以稍后说
git stash apply
Run Code Online (Sandbox Code Playgroud)
amr*_*mra 32
如果您位于顶级项目目录中,请尝试以下操作:
git restore .
Run Code Online (Sandbox Code Playgroud)
如果没有则使用:
git restore :/
Run Code Online (Sandbox Code Playgroud)
如果您想恢复子集的本地更改:
git restore :/git restore .git restore '*.c'有关详细信息,请参阅git 恢复文档。
要删除未跟踪的文件:git clean -f
Pat*_*ick 27
我遇到了类似的问题.解决方案是使用git log查找本地提交的哪个版本与远程不同.(例如版本3c74a11530697214cbcc4b7b98bf7a65952a34ec).
然后git reset --hard 3c74a11530697214cbcc4b7b98bf7a65952a34ec用来恢复更改.
Ber*_*san 18
其他答案似乎太复杂了,所以这是一个对我有用的简单解决方案:
# Execute on the root of the working tree...
# Discard all changes to tracked files
git checkout .
# Remove all untracked files
git clean -fd
Run Code Online (Sandbox Code Playgroud)
注意:被忽略的文件将不受影响
Man*_*ddy 14
我搜索了类似的问题,
想扔掉当地的承诺:
以下是:
git reset --hard origin/dev
Run Code Online (Sandbox Code Playgroud)
校验:
git status
On branch dev
Your branch is up-to-date with 'origin/dev'.
nothing to commit, working tree clean
Run Code Online (Sandbox Code Playgroud)
现在本地提交丢失,回到最初的克隆状态,上面的第1点.
小智 10
两个简单的步骤
git fetch origin
Run Code Online (Sandbox Code Playgroud)
git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)
或者如果你的 git 使用 main 而不是 master 使用这个:
git reset --hard origin/main
Run Code Online (Sandbox Code Playgroud)
您可能不一定希望/需要在工作目录中存储您的工作/文件,而只是完全摆脱它们.该命令git clean将为您执行此操作.
执行此操作的一些常见用例是删除由合并或外部工具生成的cruft或删除其他文件,以便您可以运行干净的构建.
请记住,您将需要非常谨慎地使用此命令,因为它旨在从本地工作目录中删除未跟踪的文件.如果您在执行此命令后突然改变主意,则无法返回查看已删除文件的内容.更安全的替代方案是执行
git stash --all
这将删除所有内容,但保存所有内容.之后可以使用此存储.
但是,如果您确实要删除所有文件并清理工作目录,则应执行
git clean -f -d
这将删除任何文件以及由于该命令而没有任何项目的任何子目录.执行git clean -f -d命令之前要做的一件事就是运行
git clean -f -d -n
Run Code Online (Sandbox Code Playgroud)
这将显示执行后将删除的内容的预览 git clean -f -d
所以这里是从最具侵略性到最具攻击性的选项的总结
选项1:在本地删除所有文件(最具攻击性)
git clean -f -d
Run Code Online (Sandbox Code Playgroud)
选项2:预览上述影响(预览最积极)
git clean -f -d -n
Run Code Online (Sandbox Code Playgroud)
选项3:存储所有文件(最不积极的)
`git stash --all`
Run Code Online (Sandbox Code Playgroud)
尝试此操作以还原本地分支中未提及的所有更改
$ git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)
但是如果你看到这样的错误:
fatal: Unable to create '/directory/for/your/project/.git/index.lock': File exists.
Run Code Online (Sandbox Code Playgroud)
您可以导航到'.git'文件夹,然后删除index.lock文件:
$ cd /directory/for/your/project/.git/
$ rm index.lock
Run Code Online (Sandbox Code Playgroud)
最后,再次运行命令:
$ git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)
在此处添加另一个选项。
我指的是标题:还原本地更改。
它还可以应用于未暂存以进行提交的更改。
在这种情况下,您可以使用:
git restore <file>
Run Code Online (Sandbox Code Playgroud)
回到以前的状态。
| 归档时间: |
|
| 查看次数: |
1384680 次 |
| 最近记录: |