在开发过程中,掌握 Git 的常用操作命令是提高工作效率的关键。本章将详细介绍 Git 中最常用的命令,如 git add
、git commit
、git pull
和 git push
,帮助你高效管理代码库。你将学习如何处理文件暂存、提交、更改同步及版本历史查看等核心任务。无论你是 Git 新手还是有经验的开发者,这些操作都是你日常工作的基础。通过掌握这些命令,你将能够更好地跟踪和管理你的代码变更,确保开发流程的顺畅与稳定。
在仓库里刚新建的文件是不会被跟踪起来的,比如我们使用git status
就能查看到文件的状态。
需要使用git add
才可以把本地修改的数据暂存到暂存区。暂存区的作用:像 SVN 这种没有暂存区概念的版本控制,可能会产生很多无意义的提交,暂存区可以先将一些修改暂存一下,后面再统一提交到仓库,从而减少提交次数。
基本用法:
git add <path>
通过git add <path>
的方式把path
目录下的所有文件添加到git
的暂存区,当然这些文件不包含已经被删除的文件。
示例:
# 将所有修改添加到暂存区
git add .
# 将以.cpp结尾的文件的所有修改添加到暂存区
git add *.cpp
# 将所有以Hello开头的文件的修改添加到暂存区,例如: helloWorld.txt,hello.h,helloGit.md ...
git add hello*
# 将以hello开头后面只有一位的文件提交到暂存区
# 例如:hello1.txt,helloA.cpp 如果是helloGit.txt和hello.cxx是不会被添加的。
git add hello?.*
git add
是把文件添加到暂存区,那如果想从暂存区删除呢?可以使用git rm -f
或者 git rm –cached
把文件从暂存区里移除,这个移除并不是把代码文件从磁盘上删除了,只是说不被git
管理了而已。
git add
只是把文件添加到暂存区而已,并没有真正跟踪起来,需要使用git commit
命令提交到本地仓库才能真正被git
跟踪记录,git commit
命令的用法如下:
示例:
#把暂存区和当前已被跟踪的文件的所有的修改提交到仓库里,-m参数指定了此次提交的message内容
git commit -a -m "initial commit" .
# 提交Makefile和Logger.cpp的修改
git commit Makefile Logger.cpp –m "修改编译错误,添加了对log4cpp库的依赖"
拉取(git fetch
):fetch
是拉取的意思,git fetch
只将远端仓库数据拉取到本地仓库,主要是 将远程仓库所包含分支的最新commit-id
记录到本地文件。比如,远端的数据比本地多两个版本,fetch
会将最新版本的版本ID写到本地仓库,但是,远端的文件修改并没有拉取到工作区(workspace),它只是拉取最近提交的信息出来,通过这个可以让我们知道本地比远端落后几个版本。
git fetch
通常很少去使用,因为在实际使用中会使用一个有GUI的客户端工具,并不需要敲命令。这里介绍git fetch
命令以及其他命令主要是为了了解 Git 的工作流程。
拉取合并:git pull
直接将数据拉取到工作区(workspace)。它主要由两部分构成:
git fetch
:先拉取,看一下本地仓库落后多少个版本信息。git merge
:将数据拉取到工作区。也就是说,别人修改的代码,我们可以先git fetch
到本地仓库,然后git merge
拉取到工作区;也可以通过一个命令git pull
一起完成这两个操作。
git push
用于将本地仓库中的更改推送到远程仓库。这个命令将本地分支的提交(commits)上传到远程仓库,从而使其他协作者能够看到并合并这些更改。
基本语法:
git push [<remote>] [<branch>]
<remote>
: 远程仓库的名字,通常是 origin
(默认远程仓库的名字)。<branch>
: 想推送的本地分支名。示例:
main
分支推送到远程的 main
分支。常见选项:
-u
或 --set-upstream
:将本地分支与远程分支关联起来,后续可以只用 git push
或 git pull
不指定分支。
git push -u origin feature-branch--force
或 -f
:强制推送,覆盖远程仓库的历史记录。注意使用这个选项时要非常小心,因为这可能会导致数据丢失。
git push --force--force-with-lease
:在强制推送时确保不会覆盖别人推送的更改。相对比 --force
更安全一些。
git push --force-with-lease--dry-run
:模拟推送操作,不真正推送任何更改,适用于检查即将推送的内容。
git push --dry-run错误处理:
rejected
错误:通常是因为远程分支比本地分支有更新,可能需要先拉取远程更改并解决冲突。non-fast-forward
错误:通常需要进行合并或变基操作。git pull --rebase git pushgit status
是 Git 中一个非常有用的命令,用于显示当前工作目录和暂存区的状态。这有助于了解哪些文件被修改了、哪些文件被暂存了、以及哪些文件是未跟踪的。
基本语法:
git status
执行 git status
后,会看到以下几类信息:
常见选项:
-s
或 --short
:以简短的格式显示状态。
git status -s
输出类似于:
A file1.txt M file2.txt M file3.txt ?? file4.txt
这里的 A
表示新文件已暂存,M
表示修改已暂存,??
表示未跟踪的文件。-b
或 --branch
:显示分支信息。
git status -b
输出类似于:
On branch main Your branch is up to date with 'origin/main'.--porcelain
:以机器可读的格式输出状态信息,通常用于脚本。
git status --porcelain如果工作目录中有很多未跟踪的文件或修改,可以考虑使用 git clean
或 git restore
命令来清理。
git log
是 Git 中一个非常重要的命令,用于查看提交历史。它显示了当前分支的提交记录,帮助了解代码的演变过程。
基本语法:
git log [options] [<revision range>] [--] [<path>...]
<revision range>
: 可以指定一个或多个提交范围。<path>
: 仅显示特定路径的提交记录。基本用法:
常见选项:
--pretty
: 自定义日志的输出格式。
git log --pretty=format:"%h - %an, %ar : %s"
这将以自定义格式显示提交记录,其中 %h
是提交的简短哈希, %an
是作者名, %ar
是相对时间, %s
是提交信息。--graph
: 显示提交历史的图形化表示。
git log --graph
这将以图形化的方式展示提交历史和分支合并情况。--abbrev-commit
: 显示简短的提交哈希。
git log --abbrev-commit
这会显示缩短的提交哈希值,而不是完整的哈希值。--since
和 --until
: 显示指定时间范围内的提交记录。
git log --since="2024-01-01" --until="2024-07-01"
只显示在指定时间范围内的提交记录。--author
: 显示由特定作者提交的记录。
git log --author="John Doe"
只显示指定作者的提交记录。--grep
: 按提交信息的关键词过滤记录。
git log --grep="fix bug"
只显示包含指定关键词的提交记录。--patch
: 显示每个提交的差异(diff)。
git log -p
显示每个提交中修改的具体内容。高级用法:
branch1
到 branch2
的提交记录,即 branch2
上而不在 branch1
上的提交记录。less
)来查看:
git log | lessgit reflog
是 Git 中一个非常重要的命令,用于查看和管理引用日志(reflog)。引用日志记录了对 Git 引用(如分支、HEAD)的所有修改历史,包括提交、合并、重置、移动分支等操作。它在恢复丢失的提交、调试和审计历史方面非常有用。
基本语法:
git reflog [options]
这将显示 HEAD 的所有历史记录,包括提交、重置、合并等操作。输出内容包括操作编号(reflog index)、提交哈希、操作类型和消息。
也可以查看特定操作的引用日志:
git reflog show HEAD@{<n>}
这里的 <n>
是 reflog
的索引。例如,HEAD@{1}
表示上一个 HEAD
状态。可以用来查看指定历史状态的详细信息。
在这一章中,我们详细介绍了 Git 的一些常用操作命令,包括 git add
、git commit
、git pull
、git push
、git status
、git log
和 git reflog
。通过这些命令,你可以更高效地管理你的代码库,确保代码版本的准确性和一致性。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。