Git的奇技淫巧
取消跟踪文件
顾名思义也可以理解为:从 Git 中删除文件夹但本地保留
git rm -r --cached FileName ## 这个命令用于从 Git 的版本控制中删除文件,但保留在工作目录中。它会将文件从暂存区(索引)中删除,但不会删除实际的文件。这意味着文件不再被跟踪,但仍然存在于你的工作目录中。
git commit -m "Remove FileName folder from Git" ## 提交删除文件夹的更改到Git历史记录中
git push origin <branch-name> ## push到远程分支
## 扩展
git rm FielName ## 执行命令之后,会将git暂存区文件和本地的彻底清除,慎用!
当你运行 git rm --cached
命令时,Git 会将你指定的文件或文件夹从 Git 仓库中删除,但不会删除实际的文件或文件夹。这意味着文件或文件夹将不再被 Git 跟踪,但仍然存在于你的本地文件系统中。如下图,仓库中存在一个Nginx目录,我不想让他在远程仓库中展示出来但本地又需要用到他,则我可以执行上述命令将它移除git,在提交至远程分支
回滚
保留历史记录
git revert
如果想要撤销某个或某些提交的更改,但保留这些提交的历史记录,可以使用
git revert
命令。运行
git revert <commit>
,其中<commit>
是你想要回滚的提交的标识符(commit identifier)。Git 将创建一个新的提交,该提交将撤销指定提交的更改。这样可以保留原始提交的历史记录,并且其他人在拉取你的更改时不会受到影响。
不保留历史记录
git reset
如果需要彻底删除某个或某些提交,并且不保留它们的历史记录,可以使用
git reset
命令。运行
git reset --hard <commit>
,其中<commit>
是你想要回滚到的目标提交的标识符。Git 将移动当前分支的 HEAD 指针和分支引用到目标提交,并重置工作目录和暂存区以匹配目标提交的状态。这将丢失目标提交之后的所有提交。
请注意,在使用 git revert
或 git reset
进行回滚之前,确保你理解了回滚操作的影响,并且已经备份了重要的代码。如果你在一个共享的代码库中工作,最好在与团队讨论后再进行回滚操作,以确保不会对其他人的工作产生不良影响。
救命操作
如果你向我一样,没备份文件就直接执行了git reset,那请按照如下找回在 回滚
使用
git reflog
查找被重置的提交的标识符:git reflog
这将显示你的仓库历史中的操作记录,包括重置操作。查找之前的提交的标识符(commit identifier),它应该类似于
HEAD@{n}
,其中n
是一个数字。使用
git reset
恢复到之前的提交:git reset --hard HEAD@{n}
将
<n>
替换为你在第一步中找到的数字。这将移动当前分支的 HEAD 指针和分支引用到之前的提交,并恢复工作目录和暂存区的状态。
撤销提交
在本地执行了git add 及 git commit 操作后,想撤销这两步
撤销
git add
操作:执行
git reset
命令可以将暂存区的文件撤销到工作区。例如,如果你执行了git add file1.txt
将文件添加到暂存区,可以使用命令git reset file1.txt
将其撤销。如果你想要撤销所有的
git add
操作,可以使用git reset
或者git reset .
命令。
撤销
git commit
操作:如果你想要撤销最近一次的
git commit
,可以使用git reset HEAD^
命令进行撤销。这将撤销最后一次提交,并将暂存区的文件移回到工作区,以便你可以重新修改和提交。如果你想要完全删除最后一次提交,包括提交的文件内容,可以使用
git reset --hard HEAD^
命令进行撤销。请注意,这个操作是不可逆的,会永久删除最后一次提交。
- 感谢你赐予我前进的力量