Git 教程:解密 .gitignore 文件、合并分支、解决冲突、及 Git 帮助

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
简介: 如果你忘记了命令或命令的选项,你可以使用 Git 帮助。在命令行中,有几种不同的使用帮助命令的方式:git command -help - 查看特定命令的所有可用选项git help --all - 查看所有可能的命令让我们看看不同的命令。

Git 帮助

如果你忘记了命令或命令的选项,你可以使用 Git 帮助。

在命令行中,有几种不同的使用帮助命令的方式:

  • git command -help - 查看特定命令的所有可用选项
  • git help --all - 查看所有可能的命令

让我们看看不同的命令。

Git -help 查看特定命令的选项

任何时候,如果你需要帮助来记住特定命令的选项,你可以使用 git command -help

这将显示特定命令的所有可用选项:

usage: git commit [] [--] ...

    -q, --quiet           suppress summary after successful commit
    -v, --verbose         show diff in commit message template

Commit message options
    -F, --file      read message from file
    --author      override author for commit
    --date          override date for commit
    -m, --message 
                          commit message
    -c, --reedit-message 
                          reuse and edit message from specified commit
    -C, --reuse-message 
                          reuse message from specified commit
    --fixup       use autosquash formatted message to fixup specified commit
    --squash      use autosquash formatted message to squash specified commit
    --reset-author        the commit is authored by me now (used with -C/-c/--amend)
    -s, --signoff         add a Signed-off-by trailer
    -t, --template 
                          use specified template file
    -e, --edit            force edit of commit
    --cleanup       how to strip spaces and #comments from message
    --status              include status in commit message template
    -S, --gpg-sign[=]
                          GPG sign commit

Commit contents options
    -a, --all             commit all changed files
    -i, --include         add specified files to index for commit
    --interactive         interactively add files
    -p, --patch           interactively add changes
    -o, --only            commit only specified files
    -n, --no-verify       bypass pre-commit and commit-msg hooks
    --dry-run             show what would be committed
    --short               show status concisely
    --branch              show branch information
    --ahead-behind        compute full ahead/behind values
    --porcelain           machine-readable output
    --long                show status in long format (default)
    -z, --null            terminate entries with NUL
    --amend               amend previous commit
    --no-post-rewrite     bypass post-rewrite hook
    -u, --untracked-files[=]
                          show untracked files, optional modes: all, normal, no. (Default: all)
    --pathspec-from-file 
                          read pathspec from file
    --pathspec-file-nul   with --pathspec-from-file, pathspec elements are separated with NUL character
Note: You can also use --help instead of -help to open the relevant Git manual page

### Git help --all 查看所有可能的命令

要列出所有可能的命令,可以使用 `help --all` 命令:

注意:这将显示一个非常长的命令列表

```shell
$ git help --all

这将显示所有可能的命令列表。

合并分支和解决冲突

紧急修复已经准备好,现在让我们合并 master 和 emergency-fix 分支。

首先,我们需要切换到 master 分支:

git checkout master

现在,我们将当前分支(master)与 emergency-fix 合并:

git merge emergency-fix
更新 09f4acd..dfa79db
快进
index.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

由于 emergency-fix 分支直接来自于 master,并且在我们工作时没有对 master 进行其他更改,Git 将其视为 master 的延续。因此,可以“快进”,将 master 和 emergency-fix 指向相同的提交。

由于 master 和 emergency-fix 现在本质上相同,我们可以删除 emergency-fix,因为它不再需要:

git branch -d emergency-fix
已删除分支 emergency-fix(是 dfa79db)。

合并冲突

现在我们可以切换到 hello-world-images 并继续工作。添加另一个图像文件(img_hello_git.jpg)并更改 index.html,以便显示它:

git checkout hello-world-images
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>

<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from Space" style="width:100%;max-width:960px"></div>
<p>This is the first file in my new Git Repo.</p>
<p>A new line in our file!</p>
<div><img src="img_hello_git.jpg" alt="Hello Git" style="width:100%;max-width:640px"></div>

</body>
</html>

现在,我们已经完成了在该分支上的工作,可以为该分支暂存并提交:

git add --all
git commit -m "added new image"

我们看到 index.html 在两个分支中都发生了更改。现在我们准备将 hello-world-images 合并到 master 中。但是,我们最近在 master 中所做的更改会发生什么?

git checkout master
git merge hello-world-images

自动合并 index.html

合并冲突(内容):index.html 中的合并冲突

自动合并失败;解决冲突,然后提交结果。

合并失败,因为在 index.html 的不同版本之间存在冲突。让我们来检查状态:

```bash
git status

在 master 分支上,你有未解决的路径。

(解决冲突并运行 "git commit")

(使用 "git merge --abort" 中止合并)

要提交的更改:

新文件:img_hello_git.jpg

新文件:img_hello_world.jpg

未解决的路径:

(使用 "git add ..." 标记解决)

两者修改: index.html

这证实了 index.html 中存在冲突,但图像文件已经准备好并暂存以进行提交。

因此,我们需要解决冲突。在编辑器中打开文件:

```html
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>

<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from Space" style="width:100%;max-width:960px"></div>
<p>This is the first file in my new Git Repo.</p>
<<<<<<< HEAD
<p>This line is here to show how merging works.</p>
=======
<p>A new line in our file!</p>
<div><img src="img_hello_git.jpg" alt="Hello Git" style="width:100%;max-width:640px"></div>
>>>>>>> hello-world-images

</body>
</html>

我们可以看到不同版本之间的差异,并按照我们的需求进行编辑:

<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>

<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from Space" style="width:100%;max-width:960px"></div>
<p>This is the first file in my new Git Repo.</p>
<p>This line is here to show how merging works.</p>
<div><img src="img_hello_git.jpg" alt="Hello Git" style="width:100%;max-width:640px"></div>

</body>
</html>

现在我们可以暂存 index.html 并检查状态:

git add index.html
git status

在 master 分支上,所有冲突都已解决,但你仍在合并中。

(使用 "git commit" 完成合并)

要提交的更改:

新文件:img_hello_git.jpg

新文件:img_hello_world.jpg

修改: index.html

冲突已解决,我们可以使用提交来完成合并:

git commit -m "merged with hello-world-images after fixing conflicts"

然后删除 hello-world-images 分支:

git branch -d hello-world-images
已删除分支 hello-world-images(是 1f1584e)。

现在你对分支和合并的工作方式有了更好的了解。是时候开始与远程仓库一起工作了!

Git .gitignore 文件:创建、示例规则和模式匹配

.gitignore 文件是用于指定 Git 忽略的文件和文件夹的配置文件。这意味着 Git 不会跟踪或包含在版本控制中,但它们仍然存在于你的工作目录中。以下是关于.gitignore文件的详细信息:

创建**.gitignore**文件

要创建一个.gitignore文件,请按照以下步骤操作:

  1. 打开终端或命令行工具。
  2. 导航到你的 Git 存储库的根目录。
  3. 创建.gitignore文件。你可以使用以下命令:
    touch .gitignore
    
    这将在存储库的根目录中创建一个.gitignore文件。
  4. 使用文本编辑器打开.gitignore文件,你可以添加你要忽略的文件和文件夹的规则。

示例**.gitignore**文件

下面是一个示例.gitignore文件的内容,演示了一些忽略规则:

# 忽略所有 .log 文件
*.log

# 忽略任何名为 "temp" 的目录中的所有内容
/temp/

# 忽略所有 .zip 和 .rar 压缩文件
*.zip
*.rar

# 忽略特定文件
config.txt

# 忽略特定文件夹及其内容
bin/
build/

这个.gitignore文件包含了各种忽略规则,例如忽略所有.log文件、名为"temp"的目录、.zip.rar压缩文件、config.txt文件以及bin/build/文件夹及其内容。

**.gitignore**规则

.gitignore文件的规则如下:

  • 模式匹配:.gitignore中的规则使用模式匹配来匹配文件和文件夹。
  • 行注释:以#开头的行将被视为注释。
  • 文件匹配:你可以使用*来匹配任何字符,?来匹配单个字符,[]来匹配字符集,[!...]来否定字符集。
  • 目录匹配:如果模式以/结尾,则该模式仅匹配目录。
  • 递归匹配:使用``来匹配任何子目录。
  • 否定规则:使用!符号来否定已定义的规则。

示例规则包括:

  • *.log:忽略所有扩展名为.log的文件。
  • /temp/:忽略名为"temp"的目录及其内容。
  • bin/:忽略名为"bin"的文件夹及其内容。
  • !important.log:忽略所有.log文件,但不包括名为"important.log"的文件。

通过编辑.gitignore文件,你可以自定义哪些文件和文件夹应该被 Git 忽略,以便它们不会包含在版本控制中。这对于避免将不必要的或敏感文件提交到版本控制中非常有用。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎 点赞、收藏、关注

相关文章
|
28天前
|
开发工具 git
图解Git——分支的新建与合并《Pro Git》
在Git开发中,新建与合并分支是常见的操作。以实际开发为例:为实现新需求创建分支`iss53`进行开发;遇紧急Bug时,切换至线上分支创建`hotfix`修复并合并回线上分支,再切换回`iss53`继续工作。完成`iss53`后,切换到`master`合并。若出现冲突,使用`git status`查看,手动编辑解决冲突后标记为已解决并提交。图形化工具如`git mergetool`也可辅助解决冲突。
44 9
|
28天前
|
开发工具 git 开发者
图解Git——分支简介《Pro Git》
Git 分支是其核心特性之一,允许开发者从主开发线分离工作,避免干扰主线。传统版本控制系统创建分支效率低,而Git的分支创建和切换非常轻量高效。
70 9
|
2天前
|
开发工具 git 开发者
vscode+git解决远程分支合并冲突
通过这些详细步骤,您可以掌握如何使用VSCode和Git高效地解决远程分支合并冲突,提高开发效率和代码质量。希望这些内容对您的学习和工作有所帮助。
125 86
|
17天前
|
开发工具 git 索引
怎么取消对project.private.config.json这个文件的git记录
通过以上步骤,您可以成功取消对 `project.private.config.json`文件的Git记录。这样,文件将不会被包含在未来的提交中,同时仍保留在您的工作区中。
58 28
|
28天前
|
存储 项目管理 开发工具
图解Git——分支开发工作流《Pro Git》
分支开发工作流利用Git的分支功能,支持灵活的项目管理。长期分支如`master`和`develop`分别保存稳定和开发中的代码;短期主题分支用于开发单一特性或修复问题,完成后合并到主分支。此模式确保代码稳定性,支持并行开发、便于审查和灵活调整。建议维护明确的长期分支,保持主题分支短小精悍,并定期清理无用分支。配置上可保护关键分支,遵循命名规范。
54 7
|
28天前
|
存储 缓存 Java
图解Git——远程分支《Pro Git》
远程分支是 Git 中用于管理分布式协作的关键概念。远程引用指向远程仓库中的分支和标签,常用 `git ls-remote` 或 `git remote show` 查看。日常开发中,通常使用远程跟踪分支(如 `origin/main`)与远程分支交互,简化远程仓库状态的管理和使用。远程跟踪分支记录远程分支的状态,但本身只读。
27 6
|
30天前
|
前端开发 Java 开发工具
Git使用教程-将idea本地Java等文件配置到gitte上【保姆级教程】
本内容详细介绍了使用Git进行版本控制的全过程,涵盖从本地仓库创建到远程仓库配置,以及最终推送代码至远程仓库的步骤。
39 0
|
开发工具 git
Git请求合并说明
如今公司很多新项目都采取merge request方式来进行code review、非阻塞上线部署,因此掌握merge request很有必要,步骤如下: 1、现在本地用创建一个本地分支, git checkout -b {分支名称} 2、改动{分支名称}你需要改动的代码。
2204 0
|
3月前
|
开发工具 git
git 常用命令
这些只是 Git 命令的一部分,Git 还有许多其他命令和选项,可根据具体需求进行深入学习和使用。熟练掌握这些命令能够帮助你更高效地管理代码版本和协作开发。
|
28天前
|
网络安全 开发工具 git
mac git clone命令提示git@gitee.com: Permission denied (publickey).问题修复
mac git clone命令拉取gitee上项目代码时提示密钥问题