”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 你真的了解Git吗?

你真的了解Git吗?

发布于2024-11-07
浏览:626

Do you really know Git?

本博客中的图片来自 Scott Chacon、Ben Straub 的“Pro Git”

在本博客中,您将了解有关您在编程中使用的 Git 中的一些日常功能的各种精彩事实!

开发人员很容易盲目使用工具而不知道它们在幕后是如何工作的。虽然这种抽象是为了更好,但了解事物如何工作有时可能是经验丰富的程序员和业余程序员之间的区别。

让我们深入了解一些很酷的事实!


1 - 短期状态

如果你使用 Git 有一段时间了,你应该了解 git status。但是,您是否知道有一个选项可以获得更易读且最小的状态输出?

通过使用短状态标志,-s,您可以获得更紧凑的格式。

$ git status -s
 M README
MM Rakefile
A  lib/git.rb
M  lib/simplegit.rb
?? LICENSE.txt

您会注意到输出的左侧部分有 2 列。左栏代表暂存区的状态,右栏代表工作树的状态。操作顺序也按时间顺序从左到右表示。

让我们解释一下上面的输出:

  • “M” - 已修改但未上演
  • “MM” - 上演然后再次修改。因此,下一次提交需要一个额外的阶段。
  • “A” - 创建并暂存新文件
  • “M” - 上演
  • “??” - 创建了一个新文件,但未暂存(未跟踪)

2 - 跳过暂存区

如果您想暂存跟踪的文件并在一个命令中提交所有文件怎么办?

您可以通过使用 git commit -a -m "message".

来做到这一点

请注意,不幸的是,未跟踪的文件(新创建的文件)将不会使用这个神奇的命令进行暂存。


3 - 查看您的提交历史记录

使用git log按时间倒序列出存储库中所做的提交(最近的提交首先显示)。

有多种选项允许您自定义输出。让我们回顾一些有用的:

  • -{number} 限制显示的日志条目数(例如,git log -2 显示最后两个条目)
  • --stat 显示缩写统计信息,例如每次提交的文件数量或插入/删除数量
  • --pretty=oneline 在一行上打印每个提交
  • --graph 添加一个 ASCII 图表,显示您的分支和合并历史记录

4 - 使用 Git Restore 撤消操作

当你想取消暂存文件时,请使用git reset HEAD 。当你想要取消修改已修改的文件时,请使用git checkout -- {file}

现在有一种更简单的方法可以做到这两点! Git 版本 2.23.0 引入了 git Restore,它带来了取消暂存和取消修改文件的二合一功能。

  • git Restore {file} - 取消修改已修改的文件
  • git Restore --staged {file} - 取消暂存暂存文件

5 - Git Fetch 与 Git Pull

作为程序员,您很可能至少使用过一次 git pull。此外,您很可能听说过 git fetch 但从未真正需要使用它。好吧,我们来谈谈它实际上做了什么以及它与 git pull 有何不同。

您可以将 fetch 视为 pull 中发生的事情的第一步。

在拉取中,我们从远程存储库下载所有数据并将其传输到本地存储库。这就是 fetch 的作用。

此时,您的本地存储库已拥有数据,但尚未将其与工作目录合并,以便您可以处理最新的更改。拉取的下一步是与您的分支合并,以便最新的更改位于您的工作目录中。

因此,pull 一次获取并合并所有内容,而 fetch 只执行第一步。


6 - Git 别名

如果我告诉你有一种方法可以让你的 git 命令可定制怎么办?通过git config,就可以!

您可以为常用命令设置别名,如下所示:

$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status

现在,您只需输入 git ci.,而不是输入 git commit

这对于帮助使特定任务更加直观的命令特别有用。

$ git config --global alias.unstage 'reset HEAD --'
# the double dash serves as an option separator. 
# It tells Git to treat anything after it as a filename

上面的命令使以下命令等效:

  • git unstage fileA
  • git 重置 HEAD -- fileA

添加 last 命令来查看最近的提交也是很常见的:

$ git config --global alias.last 'log -1 HEAD'

这就是本博客的全部内容!我希望您在下一个使用 Git 的项目中学到了一些巧妙的技巧,这将提高您的工作流程的质量。感谢您的阅读!

版本声明 本文转载于:https://dev.to/jihoonj/do-you-really-know-git-456d?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • C++20 Consteval函数中模板参数能否依赖于函数参数?
    C++20 Consteval函数中模板参数能否依赖于函数参数?
    [ consteval函数和模板参数依赖于函数参数在C 17中,模板参数不能依赖一个函数参数,因为编译器仍然需要对非contexexpr futcoriations contim at contexpr function进行评估。 compile time。 C 20引入恒定函数,必须在编译时进行...
    编程 发布于2025-07-09
  • 人脸检测失败原因及解决方案:Error -215
    人脸检测失败原因及解决方案:Error -215
    错误处理:解决“ error:((-215)!empty()in Function Multultiscale中的“ openCV 要解决此问题,必须确保提供给HAAR CASCADE XML文件的路径有效。在提供的代码片段中,级联分类器装有硬编码路径,这可能对您的系统不准确。相反,OPENCV提...
    编程 发布于2025-07-09
  • 表单刷新后如何防止重复提交?
    表单刷新后如何防止重复提交?
    在Web开发中预防重复提交 在表格提交后刷新页面时,遇到重复提交的问题是常见的。要解决这个问题,请考虑以下方法: 想象一下具有这样的代码段,看起来像这样的代码段:)){ //数据库操作... 回声“操作完成”; 死(); } ?> ...
    编程 发布于2025-07-09
  • Python元类工作原理及类创建与定制
    Python元类工作原理及类创建与定制
    python中的metaclasses是什么? Metaclasses负责在Python中创建类对象。就像类创建实例一样,元类也创建类。他们提供了对类创建过程的控制层,允许自定义类行为和属性。在Python中理解类作为对象的概念,类是描述用于创建新实例或对象的蓝图的对象。这意味着类本身是使用类关...
    编程 发布于2025-07-09
  • CSS可以根据任何属性值来定位HTML元素吗?
    CSS可以根据任何属性值来定位HTML元素吗?
    靶向html元素,在CSS 中使用任何属性值,在CSS中,可以基于特定属性(如下所示)基于特定属性的基于特定属性的emants目标元素: 字体家庭:康斯拉斯(Consolas); } 但是,出现一个常见的问题:元素可以根据任何属性值而定位吗?本文探讨了此主题。的目标元素有任何任何属性值,属...
    编程 发布于2025-07-09
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-07-09
  • C++中如何将独占指针作为函数或构造函数参数传递?
    C++中如何将独占指针作为函数或构造函数参数传递?
    在构造函数和函数中将唯一的指数管理为参数 unique pointers( unique_ptr [2启示。通过值: base(std :: simelor_ptr n) :next(std :: move(n)){} 此方法将唯一指针的所有权转移到函数/对象。指针的内容被移至功能中,在操作...
    编程 发布于2025-07-09
  • Python环境变量的访问与管理方法
    Python环境变量的访问与管理方法
    Accessing Environment Variables in PythonTo access environment variables in Python, utilize the os.environ object, which represents a mapping of envir...
    编程 发布于2025-07-09
  • 使用jQuery如何有效修改":after"伪元素的CSS属性?
    使用jQuery如何有效修改":after"伪元素的CSS属性?
    在jquery中了解伪元素的限制:访问“ selector 尝试修改“:”选择器的CSS属性时,您可能会遇到困难。 This is because pseudo-elements are not part of the DOM (Document Object Model) and are th...
    编程 发布于2025-07-09
  • HTML格式标签
    HTML格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2025-07-09
  • 为什么我的CSS背景图像出现?
    为什么我的CSS背景图像出现?
    故障排除:CSS背景图像未出现 ,您的背景图像尽管遵循教程说明,但您的背景图像仍未加载。图像和样式表位于相同的目录中,但背景仍然是空白的白色帆布。而不是不弃用的,您已经使用了CSS样式: bockent {背景:封闭图像文件名:背景图:url(nickcage.jpg); 如果您的html,css...
    编程 发布于2025-07-09
  • 我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    将我的加密库从mcrypt升级到openssl 问题:是否可以将我的加密库从McRypt升级到OpenSSL?如果是这样,如何?答案:是的,可以将您的Encryption库从McRypt升级到OpenSSL。可以使用openssl。附加说明: [openssl_decrypt()函数要求iv参...
    编程 发布于2025-07-09
  • Java中Lambda表达式为何需要“final”或“有效final”变量?
    Java中Lambda表达式为何需要“final”或“有效final”变量?
    Lambda Expressions Require "Final" or "Effectively Final" VariablesThe error message "Variable used in lambda expression shou...
    编程 发布于2025-07-09
  • 如何将PANDAS DataFrame列转换为DateTime格式并按日期过滤?
    如何将PANDAS DataFrame列转换为DateTime格式并按日期过滤?
    将pandas dataframe列转换为dateTime格式示例:使用column(mycol)包含以下格式的以下dataframe,以自定义格式:})指定的格式参数匹配给定的字符串格式。转换后,MyCol列现在将包含DateTime对象。 date oped filtering > = p...
    编程 发布于2025-07-09
  • 查找当前执行JavaScript的脚本元素方法
    查找当前执行JavaScript的脚本元素方法
    如何引用当前执行脚本的脚本元素在某些方案中理解问题在某些方案中,开发人员可能需要将其他脚本动态加载其他脚本。但是,如果Head Element尚未完全渲染,则使用document.getElementsbytagname('head')[0] .appendChild(v)的常规方...
    编程 发布于2025-07-09

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3