Various ways to remove local Git changes
我刚刚克隆了一个Git存储库并签出了一个分支。我处理了它,然后决定删除所有本地更改,因为我需要原始副本。
简而言之,我必须执行以下两个命令来删除本地更改
1 2 3 | git checkout . git clean -f |
我的问题是,
(1)这是消除局部变化的正确方法吗,否则请告诉我正确的方法。
(2)我们什么时候使用
谢谢
*解决方案:主要编辑:03/26:。*用特定于git的术语替换了许多模糊的术语[跟踪/未跟踪/分级/未分级]
当我们进行本地更改时,可能只有三类文件:
Type 1. Staged Tracked files
Type 2. Unstaged Tracked files
Type 3. Unstaged UnTracked files a.k.a UnTracked files
- 阶段-移动到临时区域/添加到索引的区域
- 跟踪-修改的文件
- 未跟踪-新文件。总是不老化。如果是阶段性的,这意味着它们被跟踪。
每个命令的作用:
结论:
很明显我们可以使用
1 | (1) combination of `git clean -f` and `git reset --hard` |
或
1 | (2) `git stash -u` |
达到预期的效果。
注:藏匿,顾名思义是"将(某物)安全地、秘密地存放在指定的地方",通常可以用
谢谢你,克里斯托夫和弗雷德里克·施?宁。
编辑:03/27
我觉得把"当心"的字条交给
没有回头路。使用
如果还要删除目录,请运行
如果只想删除被忽略的文件,运行
如果要删除被忽略和未被忽略的文件,请运行
参考:更多关于
编辑:05/20/15
放弃此分支上的所有本地提交[删除本地提交]
为了放弃此分支上的所有本地提交,使本地分支相同到该分支机构的"上游",只需运行
参考:http://sethrobertson.github.io/gitfixum/fixup.html
或者做
注:2015年12月6日这不是另一个问题的副本,因此问题被标记为副本。这个问题解决了如何删除本地git更改[删除添加的文件,删除添加到现有文件的更改等以及各种方法;在另一个so中,线程只处理如何删除本地提交。如果你添加了一个文件,并且你想单独删除它,那么另一个线程就不会讨论它了。因此,这不是另一个的副本]
编辑:06/23/15
如何恢复已推送到远程存储库的提交?
1 | $ git revert ab12cd15 |
编辑:2015年1月9日
从本地分支和远程分支删除以前的提交
案例:您刚刚对本地分支机构进行了更改,并立即推送到远程分支机构,突然意识到,哦,不!我不需要这个零钱。现在做什么?
分支是什么?它是当前已签出的分支。
编辑2015年8月9日-删除本地Git合并:
我在江户十一〔16〕分公司,并将江户十一〔16〕分公司与新成立的江户十一〔21〕分公司合并。
1 2 3 4 5 6 7 8 | $ git status # On branch master $ git merge phase2 $ git status # On branch master # Your branch is ahead of 'origin/master' by 8 commits. |
问:如何摆脱这种合并?尝试过
唯一起作用的是以下任何一种:
1 | $ git reset --hard origin/master |
或
1 | $ git reset --hard HEAD~8 |
或
这完全取决于您正试图撤消/还原的内容。首先阅读ube链接中的帖子。但要想回答:
硬复位
1 | git reset --hard [HEAD] |
完全删除对跟踪文件的所有阶段性和非阶段性更改。
我发现自己经常使用硬重置,当我像"撤销一切,就像我从远程完成了一个完整的重新克隆"。在你的情况下,如果你只是想要你的复古,这会起作用。
干净的
1 | git clean [-f] |
删除未跟踪的文件。
用于删除临时文件,但保留对已跟踪文件的分段和未分段更改。大多数情况下,我可能最终会制定一个忽略规则,而不是重复清理——例如,对于C项目中的bin/obj文件夹,您通常希望将其从repo中排除以节省空间,或者类似的情况。
-f(force)选项还将删除未被跟踪的文件,这些文件也将被git忽略,尽管忽略规则。在上述情况下,使用忽略规则从不跟踪bin/obj文件夹,即使Git忽略了这些文件夹,使用force选项也会将它们从文件系统中删除。我偶尔会看到这种用法,例如在编写部署脚本时,您希望在部署、压缩或其他任何操作之前清理代码。
Git Clean不会触摸已经被跟踪的文件。
结账"点"
1 | git checkout . |
在阅读你的帖子之前,我从来没有见过这个符号。我很难找到这方面的文档(也许有人能帮上忙),但从四处游玩来看,这似乎意味着:
"撤消我的工作树中的所有更改"。
即撤消跟踪文件中的未分页更改。它显然不涉及阶段性的更改,只留下未跟踪的文件。
贮藏
有些答案提到了藏匿。正如措辞所暗示的那样,当您正处于某件事情的中间时(还没有准备好提交),您可能会使用stashing,并且您必须临时切换分支或以某种方式处理代码的另一种状态,然后返回到"凌乱的办公桌"。我不认为这适用于你的问题,但它确实很方便。
总结
一般来说,如果您确信自己已经承诺并可能推动进行一项远程重要更改,如果您只是在玩游戏或类似游戏,那么使用
所有其他的命令都是为了简化更复杂的场景,在这些场景中需要"撤销内容"的粒度:)
我觉得,你的问题1被涵盖了,但最后,总结一下2:你从未发现有必要使用
希望这能覆盖。
和Git中的所有东西一样,有多种方法可以做到这一点。您使用的两个命令是一种方法。你可以做的另一件事就是把它们和
关于
至于你的另一个问题,
此时添加答案的原因:好的。
到目前为止,我把结论和"答案"添加到我最初的问题本身,使问题非常冗长,因此转向了单独的答案。好的。
我还添加了更常用的git命令,可以帮助我在git上,也可以帮助其他人。好的。
基本上清除所有本地提交
执行任何提交之前的第一步是配置用户名和电子邮件,这些用户名和电子邮件与提交一起出现。好的。
#设置要附加到提交事务的名称好的。
1 | $ git config --global user.name"[name]" |
#设置要提交到提交事务的电子邮件好的。
1 | $ git config --global user.email"[email address]" |
#列出全局配置好的。
1 | $ git config --list |
#列出远程URL好的。
1 | $ git remote show origin |
检查状态好的。
1 | git status |
#列出所有本地和远程分支好的。
1 | git branch -a |
#创建新的本地分支并开始处理此分支好的。
1 | git checkout -b"branchname" |
或者,它可以作为一个两步的过程来完成好的。
创建分支:
#提交本地更改[两步过程:-将文件添加到索引,这意味着添加到临时区域。然后提交此临时区域中存在的文件]好的。
1 2 3 | git add <path to file> git commit -m"commit message" |
#结帐其他本地分行好的。
1 | git checkout"local branch name" |
#删除本地分支中的所有更改[假设您在本地分支中做了一些更改,如添加新文件或修改现有文件,或进行本地提交,但不再需要这些更改]
注:很明显我们可以使用(1)
注1:藏匿,这个词的意思是"将(某物)安全秘密地存储在指定的地方"。这可以使用git stash pop进行检索。因此,在上述两个选项之间进行选择是开发人员的职责。好的。
注2:
#切换到主分支并确保您是最新的。好的。
1 | git checkout master |
1 | git pull |
#将功能分支合并到主分支。好的。
1 | git merge feature_branch |
#将主分支重置为原始状态。好的。
1 | git reset origin/master |
#意外地从本地删除了一个文件,如何恢复?执行
1 | git checkout branchname <file path name> |
就是这样!好的。
#将主分支与其他分支合并好的。
1 2 | git checkout master git merge someotherbranchname |
#重命名本地分支好的。
1 | git branch -m old-branch-name new-branch-name |
#删除本地分支好的。
1 | git branch -D branch-name |
#删除远程分支好的。
1 | git push origin --delete branchname |
或好的。
1 | git push origin :branch-name |
#还原已推送到远程存储库的提交好的。
1 | git revert hgytyz4567 |
#使用git从以前的提交分支好的。
1 | git branch branchname <sha1-of-commit> |
#更改已推送到远程的最近提交的提交消息好的。
1 2 | git commit --amend -m"new commit message" git push --force origin <branch-name> |
#放弃此分支上的所有本地提交[删除本地提交]好的。
为了放弃该分支上的所有本地提交,为了使本地分支与该分支的"上游"相同,只需运行好的。
1 | git reset --hard @{u} |
参考:http://sethrobertson.github.io/gitfixum/fixup.html或者做
#是否恢复已推送到远程存储库的提交?好的。
1 | $ git revert ab12cd15 |
#从本地分支和远程分支删除以前的提交好的。
用例:您刚刚提交了一个更改到您的本地分支,并立即推到远程分支,突然意识到,哦,不!我不需要这个零钱。现在做什么?好的。
#从本地和远程repo中删除一些最近的提交,并保留到所需的提交。(一种从本地和远程恢复提交)好的。
假设您有3个承诺,您已将其推送到名为"EDOCX1"(3)的远程分支。好的。
1 2 3 | commitid-1 done at 9am commitid-2 done at 10am commitid-3 done at 11am. // latest commit. HEAD is current here. |
恢复到旧的提交(更改分支的状态)好的。
看你所有的委员好的。
#删除本地Git合并:案例:我在主分支机构,并将主分支机构与新工作的分支机构合并,第2阶段好的。
1 | $ git status |
在分支主机上好的。
在分支主机上好的。
您的分支机构在8次提交之前领先于"原始/主"。好的。
问:如何摆脱这个本地Git合并?尝试过的
$git reset--硬原点/主节点好的。
或好的。
$git重置--硬头~8好的。
或好的。
#创建gitignore文件好的。
sample.gitignore内容:好的。
1 2 3 | .project *.py .settings |
参考链接到git备忘表:https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf好的。好啊。
1。当您根本不想保留本地更改时。
1 | git reset --hard |
此命令将从本地存储库中完全删除所有本地更改。这是在pull命令期间避免冲突的最佳方法,除非您根本不想保留本地更改。
2。当您想保留本地更改时如果要从远程提取新更改并忽略在这一拉动过程中的局部变化,
1 | git stash |
它将存储所有本地更改,现在您可以提取远程更改,
1 | git pull |
现在,您可以通过以下方式恢复本地更改:
1 | git stash pop |
我认为Git有一件事没有明确记录。我认为它实际上被忽视了。
伙计,你救了我一天。我总是想尝试使用修改过的代码。但是,有时候事情最终会弄乱修改后的代码,添加新的未跟踪文件等。所以我想做的是,准备好我想要的,做那些乱七八糟的事情,然后快速清理,如果我高兴的话提交。
有
然后,
但我认为他们应该让
用途:
1 | git checkout -- <file> |
放弃工作目录中的更改。
对于放弃所有我喜欢的藏匿和放弃的藏匿,这是最快的方法放弃所有,特别是如果你在多个回购之间工作。
这将隐藏
最好的方法是检查更改。
在名为project name的项目中更改文件pom.xml,可以执行以下操作:
1 2 3 4 5 6 7 8 9 10 | git status # modified: project-name/pom.xml git checkout project-name/pom.xml git checkout master # Checking out files: 100% (491/491), done. # Branch master set up to track remote branch master from origin. # Switched to a new branch 'master' |
首先,检查您的重要更改是否通过以下方式保存:
$ git status
比尝试
$ git reset --hard
it will reset your branch to default
但如果你需要撤销:
$ edit (1)
$ git add frotz.c
filfre.c $ mailx (2)
$ git reset
(3) $ git pull git://info.example.com/ nitfol
阅读更多信息>>https://git-scm.com/docs/git-reset