我刚刚克隆了一个 git 存储库并签出了一个分支。我对它进行了处理,然后决定删除我所有的本地更改,因为我想要原始副本。
简而言之,我必须执行以下两个命令来删除我的本地更改
git checkout .
git clean -f
我的问题是,
(1)这是摆脱本地更改的正确方法,否则请让我知道正确的方法。
(2)当我们使用git reset --hard
,因为我可以重置,即使没有这个命令
谢谢
* 解决方案:主要编辑:03 / 26:*用 git 特定术语替换了许多模糊术语 [跟踪 / 未跟踪 / 暂存 / 暂存]
当我们进行本地更改时,可能只有三类文件:
类型 1.暂存跟踪的文件
类型 2.未暂存的已跟踪文件
类型 3.Unstaged UnTracked files a.k.a UnTracked files
暂存-移动到暂存区域 / 添加到索引的
已跟踪-已修改的文件
UnTracked-新文件。总是未上演。如果上演,这意味着他们被跟踪。
每个命令的作用:
git checkout .
-仅删除未暂存的已跟踪文件 [类型 2]
git clean -f
-仅删除未暂存的未跟踪文件 [类型 3]
git reset --hard
-仅删除暂存跟踪和未暂存跟踪文件 [类型 1 、类型 2]
git stash -u
-删除所有更改 [类型 1 、类型 2 、类型 3]
结论:
很明显,我们可以使用
(1) combination of `git clean -f` and `git reset --hard`
或
(2) `git stash -u`
以达到预期的结果。
注意:Stashing,因为这个词的意思是“将(某物)安全,秘密地存储在指定的地方”。这总是可以使用git stash pop
进行检索。因此,在上述两个选项之间进行选择是开发人员的要求。
谢谢 Christoph 和 Frederik Sch ø ning。
编辑:03 / 27
我认为值得将“当心”注释放在git clean -f
git clean-f
没有回头路。使用-n
或--dry-run
预览您将造成的伤害。
如果您还想删除目录,请运行git clean -f -d
如果只想删除被忽略的文件,请运行git clean -f -X
如果要删除已忽略和未忽略的文件,请运行git clean -f -x
参考:关于git clean
的更多信息:How to remove local (untracked) files from the current Git working tree?
编辑:05 / 20 / 15
丢弃此分支上的所有本地提交[删除本地提交]
为了丢弃此分支上的所有本地提交,使本地分支与此分支的“上游”相同,只需运行git reset --hard @{u}
参考:http://sethrobertson.github.io/GitFixUm/fixup.html
或执行git reset --hard origin/
[如果本地分支为]
注意:06 / 12 / 2015这是不是标记为重复的另一个 SO 问题的副本。这个问题解决了如何删除本地 GIT 更改 [删除添加的文件,删除添加到现有文件的更改等和各种方法;在另一个 SO 线程中只解决如何删除本地提交。
编辑:06 / 23 / 15
如何恢复已经推送到远程存储库的提交?
$ git revert ab12cd15
编辑:09 / 01 / 2015
从本地分支和远程分支删除以前的提交
案例:你刚刚提交了一个更改到你的本地分支,并立即推送到远程分支,突然意识到,哦,不!我不需要这个改变。现在做什么?
git reset --hard HEAD~1
[用于从本地分支删除该提交]
git push origin HEAD --force
[两个命令都必须执行。用于从远程分支删除]
分支是什么?它是当前签出的分支。
编辑 09 / 08 / 2015-删除本地 git合并:
我在分支上,并将
分支与新工作的分支
phase2
合并
$ git status
# On branch
$ git merge phase2
$ git status
# On branch
# Your branch is ahead of 'origin/' by 8 commits.
问:如何摆脱这种合并?尝试git reset --hard
和git clean -d -f
都不起作用。
工作的唯一的东西是下面的任何一个:
$ git reset --hard origin/
或
$ git reset --hard HEAD~8
或
$ git reset --hard 9a88396f51e2a068bb7
[sha 提交代码-这是在所有合并提交发生之前存在的代码]
这一切都取决于你试图撤消 / revert。从阅读the post in Ube's link开始。但要尝试一个答案:
Hard resetgit reset --hard [HEAD]
完全删除对跟踪文件的所有暂存和未暂存更改。
我发现自己经常使用硬重置,当我像“只是撤消一切,就像我从远程做了一个完整的重新克隆。”在你的情况下,你只想要你的回购原始,这将工作。
Cleangit clean [-f]
删除未跟踪的文件。
大多数时候,我可能最终会做一个 ignore-rule 而不是反复清理-例如,对于 C # 项目中的 bin / obj 文件夹,您通常希望从您的 repo 中排除以节省空间,或者类似的东西。
-f (force) 选项也将删除未被跟踪的文件和虽然 ignore-rule 也被 git 忽略。在上面的情况下,使用 ignore-rule 永远不会跟踪 bin / obj 文件夹,即使这些文件夹被 git 忽略,使用 force-option 将从您的文件系统中删除它们。
Git clean 不会触及已经被跟踪的文件。
结帐“点”
git checkout .
在阅读你的帖子之前,我从来没有见过这个符号。我很难找到这个文档(也许有人可以帮助),但是从玩了一点,它看起来像它的意思:
“撤消我的工作树中的所有更改。”
即撤消跟踪文件中的未暂存更改。它显然不会触及暂存的更改,而是将未跟踪的文件单独留下。
Stashing一些答案提到 stashing 正如措辞所暗示的那样,当你处于某些事情的中间(不准备提交)时,你可能会使用 stashing,你必须暂时切换分支或以某种方式处理代码的另一种状态,然后返回到你的“凌乱的办公桌”。
To sum up通常,如果您确信自己已提交并可能推送到远程重要更改,如果您只是在玩耍等,则使用git reset --hard HEAD
后跟git clean -f
将明确地将代码清理到状态,如果它刚刚被克隆并从分支签出,则必须强调的是,重置也将删除中的暂存但未提交的更改。
所有其他命令都在那里,以促进更复杂的场景,其中需要“撤消东西”的粒度:)
我觉得,你的问题 # 1 已被覆盖,但最后,总结 # 2:你从来没有发现需要使用git reset --hard
的原因是你从来没有上演过任何东西。
希望这涵盖。
此时添加答案的原因:
到目前为止,我将结论和“答案”添加到我的初始问题本身,使问题非常冗长,因此转向单独的答案。
我还添加了更多的经常使用的 git 命令,帮助我在 git 上,帮助别人。
基本上清理所有本地提交$ git reset --hard
和$ git clean -d -f
执行任何提交之前的第一个步骤是配置用户名和与提交一起显示的电子邮件。
# 设置要附加到提交事务的名称
$ git config --global user.name "[name]"
# 将您想要的电子邮件设置为提交事务
$ git config --global user.email "[email address]"
# 列出全局配置
$ git config --list
# 列出远程 URL
$ git remote sw origin
# 检查状态
git status
# 列出所有本地和远程分支
git branch -a
# 创建一个新的本地分支并开始处理此分支
git checkout -b "branchname"
或者,它可以作为一个两步的过程来完成
创建分支:git branch branchname
处理此分支:git checkout branchname
# commit local changes[两步过程:-将文件添加到索引,这意味着添加到暂存区域。然后提交此暂存区域中存在的文件]
git add <path to file>
git commit -m "commit message"
# checkout 一些其他本地分支
git checkout "local branch name"
# 删除本地分支中的所有更改[假设您在本地分支中进行了一些更改,例如添加新文件或修改现有文件,或进行本地提交,但不再需要]git clean -d -f
和git reset --hard
[清除对本地分支所做的所有本地更改,除非本地提交]
git stash -u
也会删除所有更改
注意:很明显,我们可以使用(1)git clean –d –f
和git reset --hard
的组合或(2)git stash -u
来实现所需的结果。
注 1:Stashing,因为这个词的意思是 '将 (某物) 安全和秘密地存储在指定的地方。' 这总是可以使用 git stash pop retreived。所以在上面两个选项之间进行选择是开发人员的电话。
注 2:git reset --hard
将删除工作目录更改。请确保在运行此命令之前隐藏要保留的任何本地更改。
# 切换到主分支并确保您是最新的。
git checkout
git fetch
[这可能是必要的(取决于您的 git 配置)以接收源 / 主更新]
git pull
# 将特征分支合并到主分支中。
git merge feature_branch
# 将主分支重置为原始状态。
git reset origin/
# 意外地从本地删除了一个文件,如何找回它?做一个git status
以获取已删除资源的完整文件路径
git checkout branchname <file path name>
就是这样!
# 将主分支与 someotherbranch 合并
git checkout
git merge someotherbranchname
# 重命名本地分支
git branch -m old-branch-name new-branch-name
# 删除本地分支
git branch -D branch-name
# 删除远程分支
git push origin --delete branchname
或
git push origin :branch-name
# 还原已推送到远程存储库的提交
git revert hgytyz4567
使用 GIT 从先前提交的 # branch
git branch branchname <sha1-of-commit>
# 更改已推送到远程的最新提交的提交消息
git commit --amend -m "new commit message"
git push --force origin <branch-name>
# 丢弃此分支上的所有本地提交[删除本地提交]
为了丢弃此分支上的所有本地提交,使本地分支与此分支的“上游”相同,只需运行
git reset --hard @{u}
参考:http://sethrobertson.github.io/GitFixUm/fixup.html或 dogit reset --hard origin/
[如果本地分支是主分支]
# 是否还原已推送到远程存储库的提交?
$ git revert ab12cd15
# 从本地分支和远程分支删除上一个提交
用例:您刚刚提交了对本地分支的更改,并立即推送到远程分支,突然意识到,哦,不!我不需要此更改。现在做什么?
git reset --hard HEAD~1
[用于从本地分支删除该提交。1 表示您进行的 ONE 提交]
git push origin HEAD --force
[两个命令都必须执行。用于从远程分支删除]。当前签出的分支将被称为执行此操作的分支。
# 从本地和远程存储库中删除一些最近的提交,并保留到所需的提交。(一种从本地和远程恢复提交)
假设您已经将 3 个提交推送到名为“develop
”的远程分支
commitid-1 done at 9am
commitid-2 done at 10am
commitid-3 done at 11am. // latest commit. HEAD is current here.
恢复到旧提交(更改分支的状态)
git log --oneline --decorate --graph
/ / 查看您的所有评论
git clean -d -f
/ / 清除任何本地更改
git reset --hard commitid-1
/ / 本地恢复到此 commitid
git push -u origin +develop
/ / 将此状态推送到远程。+ 执行强制推送
# 删除本地 git merge:情况:我在主分支上,并将主分支与新工作的分支 phase2 合并
$ git status
在分支主机上
$ git merge phase2
$ git status
在分支主机上
您的分支在“origin / ”前面8提交。
问:如何摆脱这个本地 git 合并?尝试了git reset --hard
和git clean -d -f
两者都不起作用。唯一起作用的是下面的任何一个:
$git reset--hard origin /
或
$git reset--hard HEAD~8
或
$ git reset --hard 9a88396f51e2a068bb7
[sha 提交代码-这是在所有合并提交发生之前存在的代码]
# 创建 gitignore 文件
touch .gitignore
/ / 在 mac 或 unix 用户中创建文件
样本.gitignore 内容:
.project
*.py
.settings
GIT 备忘单的参考链接:https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf
与 git 中的所有内容一样,有多种方法。您使用的两个命令是一种方法。您可以做的另一件事是简单地用git stash -u
隐藏它们。-u
确保还包括新添加的文件(未跟踪)。
git stash -u
的好处是
它可能是最简单的(唯一?)单个命令来实现你的目标
如果你后来改变主意,你会得到所有你的工作与git stash pop
(这就像在 gmail 中删除一封电子邮件,如果你后来改变主意,你可以撤销)
由于您的其他问题git reset --hard
不会删除未跟踪的文件,因此您仍然需要git clean -f
。但是git stash -u
可能是最方便的。
1.当您根本不想保留本地更改时。
git reset --hard
此命令将从本地存储库中完全删除所有本地更改。这是避免在 pull 命令期间发生冲突的最佳方法,只有当您根本不想保留本地更改时。
2.当你想保留你的本地更改时
如果您想从远程拉取新的更改,并希望在此拉取期间忽略本地更改,那么,
git stash
它将隐藏所有本地更改,现在您可以提取远程更改,
git pull
现在,你可以通过以下方式带回你当地的变化,
git stash pop
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(74条)