7大Git实用技巧和命令总结

更新日期: 2020-01-24 阅读: 2.6k 标签: 命令

Git 是一个非常强大的工具,它包含丰富的工具用以维护项目。本文介绍了一些 Git 日常使用过程中的实用技巧和命令,希望这些内容能够对大家有所帮助。


Git diff

通常情况下,我们会在自己的独立分支中完成需求开发,此时就会有需求将自己的分支和其他分支进行对比。这个功能可以通过

git diff branch1 branch

命令来实现。

如果希望对比暂存区和当前的 HEAD,那么使用

git diff --cached

命令会非常方便。普通的git diff命令默认对比的是没有加到索引中的文件。


恢复暂存区

如果已经将一些文件添加到暂存区后又后悔了,Git 提供了多个命令来实现这个功能,具体需要根据当时情况而定。

git rm path/to/file --cached

这个命令将文件从暂存区索引中删除,但是仍然会将文件保留在工作目录。这比直接使用

git rm file -f

完全删除文件会安全一点。


Git reset

如果希望恢复一些已经提交的改动,我们可以使用

git reset

这个命令可以完成许多不同的行为,因此需要按照实际场景进行使用。

如果希望去除所有修改,包括索引中的内容和工作目录中的修改,那么可以使用

git reset --hard

如果仅仅是希望重置索引,那么可以使用

git reset --mixed

这也是git reset命令的默认行为。混合的重置会保留当前工作目录中的改动。最后,如果仅仅希望修改分支的 HEAD,可以通过

git reset --soft

来实现。

当运行git reset命令的时候,我们可以指定多个目标文件作为参数传入。当然可以通过

git reset --hard COMMIT_ID

恢复到指定的提交版本。


Git stash

大家应该对git stash命令并不陌生,它可以通过git stash pop命令方便的将之前的改动恢复回来。然而,如果工作目录中有未追踪的文件,默认情况下是不会将其存入临时储藏区的。为了能够临时保存未追踪的文件,可以使用

git stash --include-untracked

另外一个非常有用的命令是

git stash list

它能列出临时储藏区中的内容。


历史记录

Git 自带了非常强大的工具来查看项目以及特定文件的变更情况。我个人非常喜欢用其中的一个命令:

git log --graph --decorate --oneline

它可以用于展示经过修饰的提交历史。这个命令非常冗长,因此我建议可以为它创建一个别名(这可能是所有技巧中最有用的,因为许多命令都比较难记)。git log 命令可以显示 HEAD、所有提交的 ID 以及分支信息。有了这些信息之后,我们可以使用

git show COMMIT_ID/HEAD/BRANCH

来显示更详细的信息。

有的时候我们需要了解谁对一个文件做了哪些改动,这正是

git blame path/to/file

这个命令所提供的功能。

之前提到过git diff命令,它也是一个查看历史的工具。例如,如果需要对比当前 HEAD 和前两个提交,可以使用

git diff HEAD HEAD~2

为了能够展示每个提交中更详细的更新信息,可以使用

git log --patch

如果只想要看包含关键字“apple”的提交,使用

git log --grep apples --oneline

要查看历史提交记录中两个点之间的提交历史,我们可以用

git log HEAD~5..HEAD^ --oneline

对于分支可以使用

git log branch_name..master --oneline


修复错误提交

注意:以下一些命令会修改提交历史,使用前请确保了解后再执行

当提交出错时,我们可能会希望能够修改提交历史。我不建议修改已经推送到远程仓库的提交历史(即使 git 允许这样做),但是对于本地仓库的提交历史,我个人认为还是可以修改的。通过

git commit --amend

可以删除前一次提交,并创建一个新的提交记录以替代之前的提交。

另一个我很喜欢的 git 使用技巧是交互式变基 (rebase)。它可以用来编辑提交信息,或者将多个提交压缩成一个提交,这也是我最喜欢的一个功能。为了在远程仓库 origin 的 master 分支之后的所有提交上执行交互式变基,可以使用

git rebase -i origin/master

这个命令会显示提交列表和可执行操作的详细描述。例如以下操作将会把多个提交压缩成一个:

1 pick 80f2a48 Add feature X
2 squash 2c74ea2 Add junit tests for feature X
3 squash 4k81nm5 Bugfix for feature X

最终的结果会是生成一个提交消息为“Add feature X”的提交。

如果需要恢复一个有问题的提交,我们可以使用

git revert COMMIT_ID

该命令会创建一个新的提交,让当前项目状态恢复到指定提交之前。

如果我们在修复问题时出现了误操作,例如不小心删除了不应该删除的文件。我们还是可以从版本库中恢复回来,因为 git 保存了所有修改的版本,包括被移除的提交。git reflog命令就是用来实现这个功能的。


挑拣提交(cherry-pick)

假设我们和同事在各自单独的分支上进行开发,同事有一个重要的提交我们也想应用到自己的分支上来,但是不需要对方分支的其他提交。这时我们可以使用

git cherry-pick COMMIT_ID


后记

以上都是我最喜欢的 git 实用技巧。希望你也能从中学到一些新知识。这些都是我在日常使用中发现的非常有用的命令,它们对我的日常工作非常有用。如果你也有类似常用的 git 实用技巧或者常用命令,可以分享出来大家一起交流。


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/8373

相关推荐

python常用命令

#查看django版本;创建一个项目mysite;在当前目录下启动manage.py;创建一个polls应用;在当前目录下针对models生成sql语句;根据生成的sql语句生成数据库

常用的搜索命令_高级搜索指令大全

作为一名资深SEO,不懂得搜索引擎高级指令的使用显然是说不过去的。搜索引擎高级指令就如同语言一样,用来建立搜索引擎与SEO人员直接沟通的“通道”,下面就为大家整理下常用的高级搜索命令

10个常用Nginx 常用命令

Nginx 是一个免费、开源、高性能、可伸缩、可靠、功能全面且流行的 HTTP和反向代理服务器,一个邮件代理服务器,以及通用的 TCP/UDP 代理服务器。

FFmpeg常用命令合集

视频裁剪滤镜(播放器大小裁剪): ffmpeg -i killer.mp4 -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy out.mp4;视频裁剪(按时间裁剪): ffmpeg -i shanguangshaonv.mp4 -ss

常用Vim命令及实用Vim按键映射配置详解

Vim按键映射可用于设置Vim命令或命令串的别名,完成个性化Vim按键设置。Vim命令虽然很多,但是常用的Vim命令却被使用者所熟知。Vim可视化模式下, > 用于增加缩进;而 gv 命令可以用于重新选取上一次由可视模式所选择的文本范围。

node.js中使用yargs来处理命令行参数

yargs库能够方便的处理命令行参数。读取命令行参数argv 对象用来保存命令行参数,传递参数时,参数名以 -- 开头,中间使用 = 或 空格,然后接上值 。argv 有一个 下划线 属性,该属性用来获取非连词线开头的参数

git常用命令

git init创建/初始化一个的存储库;git status显示工作目录和暂存区的状态;git add将文件添加到索引/暂存区;git commit:提交更改到存储库;git checkout:切换分支

ping命令使用图文教程

ping命令对于新手小白用户会不太清楚的用法的,而对于那种经常用这个工具的网友习惯了这个命令操作便捷,就觉得不一样了可以惯性的行为打开这个Ping命令。Ping命令其实是一个非常好的网络故障诊断工具。在大家遇到网络问题时,可以试试小编分享的方法

Flutter 常用命令

查看flutter是否安装到位 环境是否正常;查看版本号;升级环境flutter upgrade;获取flutter packages包 (现在基本上已经是保存就自动导入的了 );以release 模式运行

每个Web开发者都该了解的12条命令行

在开发者的弹药箱里,命令行是最具生产力的工具之一。掌握它们可以给你的工作流程带来非常积极的影响。因为,许多日常任务都可以用一条命令然后按回车来解决。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!