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 X2 squash 2c74ea2 Add junit tests for feature X3 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 实用技巧或者常用命令,可以分享出来大家一起交流。
为您推荐
基础命令初始化一个Git仓库:git init添加到暂存区:git add <file>提交到本地仓库:git commit -m <message>仓库版本号切换:git reset --hard commit_id查看提交历史:git log查看历史命令:git reflog丢弃工作区..
仓库# 在当前目录新建一个Git代码库$ git init# 新建一个目录,将其初始化为Git代码库$ git init [project-name]# 下载一个项目和它的整个代码历史$ git clone [url]配置# 显示当前的Git配置$ git config --list# 编..
在ASP.NET Core开发中,以下是一些常用的命令:dotnet new:创建一个新的项目或项目文件。dotnet new web -n MyWebApp:创建一个新的Web应用程序项目。dotnet new mvc -n MyMvcApp:创建一个新的MVC应用程序项目。do..
cmd命令删除空文件夹 rd /s/q "D:\Program Files\afish"cmd命令删除里面的文件 del /a/f/q "D:\Program Files\afish\123.txt" 注意:路径带空格,加引号 介绍几个命令: dir 显示目录和文件 cd 进入目录 del 删除文..
Linux sed命令关键字匹配文件中整行的任意字符然后替换整行语法:sed -i s/.*要匹配的字串符.*/待替换的字串符/ test.txt例如,文件中内容如下:aabbccddbbccdd要将包含bb的行替换为www,使用如下命令:sed -i s/.*b..
我们在写shell脚本时,有时候需要根据某个命令是否存在来决定是否执行某些操作,可以有两种方法来判断命令是否存在,参考代码如下:判断linux命令是否存在,方法1:#!/bin/bashif which mycmd /dev/null 21; thenech..
linux中date命令,可以输出各种格式的时间,有时候在shell脚本中需要获取一定格式的时间字符串,直接使用date命令格式化时间输出就可以完成。date命令的help如下:ferris@ferris-pc:~$ date --help用法:date [选项]..
CentOS7可以通过yum命令安装支持zip的工具unzip,下面是安装和使用的方法。安装unzip工具yuminstall-yunzipzip使用unzip命令解压zip文件#解压到当前目录下unziptest.zip#使用-d参数解压到指定目录下unzip-d/filestes..
前言在Linux中,尤其是在没有GUI界面的Linux系统中,需要连接WiFi时只能通过命令来完成,大致过程如下:安装软件连接WiFi需要用到iw,wpa_supplicant和net-tools中的一些工具,一些嵌入型Linux中可能已经在生成系统..
运维人员需要掌握的Docker命令主要包括:1.容器操作:docker ps:查看正在运行的容器。docker ps -a:查看所有容器,包括停止的容器。docker start:启动一个或多个已停止的容器。 docker stop:停止一个或多个正在运行的..
前言做网站的目的就是将自己的信息展示给目标用户,最直接的就是通过搜索引擎搜索展示。针对搜索引擎也需要优化,也就是我们说的SEO优化,新站长可能会特别关注蜘蛛爬行的次数、频率等,而做好网站SEO优化的第一步就..
在 Linux 上使用 apt-get 命令遇到困难?以下是修复终端中的错误的方法。要点如果您遇到“apt-get:找不到命令”错误,请确保您使用的是基于 Debian 的 Linux 发行版。如果您使用不同的发行版,例如 CentOS 或 RHEL..
在这个基本命令行教程中,了解在 Linux 终端中重命名文件和目录的各种方法。如何在 Linux 终端中重命名文件和目录?您使用 mv 命令。是的,与用于将文件和文件夹从一个位置“移动”到另一个位置的 mv 命令相同。您可..
前言linux bash shell中的wait命令是一个等待给定操作完成并返回等待命令的退出状态的命令,由于wait命令会影响当前的shell执行环境,因此它在大多数shell中作为内置命令实现。在本文中,我们将探讨linux bash shell..
前言在Linux中,有时候需要写脚本完成一些文件上传下载的操作,从而节省一些手动拷贝文件的操作,使用scp命令通过ssh协议,可以实现文件或文件夹的上传和下载,使用sshpass命令,可是的scp命令带上密码,避免手动输..
在C#中,有时需要执行命令行指令来完成特定的任务。这可能包括运行脚本、管理服务、获取系统信息等。C# 提供了 System.Diagnostics 命名空间中的 Process 类来启动和管理系统进程,包括命令行窗口(cmd.exe)。C# 调..
Entity Framework (EF) 中的数据库迁移是一种管理数据库架构更改的技术。通过数据库迁移,你可以将模型更改应用到数据库中,而无需手动编写 SQL 脚本。下面是如何使用 EF 进行数据库迁移的基本步骤:启用数据库迁移..
前言pacman是arclinux中的软件包管理工具,也是widows上msys2默认的包管理工具,pacman可以直接从网络上的软件仓库下载安装及删除软件,自动处理依赖关系,类似ubuntu中的apt-get。安装软件pacman -S 软件名: 安装软..
GitHub是全球最大的开源代码托管平台,它不仅提供了存储和管理代码的功能,还拥有丰富的协作工具和功能,使开发者能够更好地协作、追踪代码变更、解决问题等。在本文中,我们将介绍一些基本的GitHub操作,帮助初学者..
前言压缩和解压在Linux使用过程中是非常常用的功能,常见的压缩包格式主要有zip,tar,tar.gz,tar.xz,rar等,经常从网上下载一些源码或工具都是打包成压缩包的,要使用就得解压,对于Linux初学者,总是忘记解压命..