Git 常见功能总结

博客主要围绕Git的使用展开,介绍了常见命令,如初始化仓库、拉取代码、缓存更改等。重点阐述了将多个commit的修改追加到某次特定commit上的详细步骤,包括保存改动、进入编辑界面、编辑rebase列表等,还提及遇到冲突时的解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、常见命令

1、初始化本地仓库

git init

2、需要与码云保持一致

git config --global user.name "用户姓名"
git config --global user.email "用户邮箱" 

3、设置远程地址

git remote add origin https://gitee.com/you/your.git (或者ssh地址,以后不用输入密码)  

4、拉取远程代码(初次建仓库的README)

git pull origin master

5、添加要上传的文件

git add .

6、上传说明

git commit -m "第一次提交"

7、上传代码

git push -u origin master

8、强制上传

 git push -u origin master -f

9、配置新的远程仓库地址,需要获取新的ssh远程地址

git remote set-url origin git@gitee.com:you/you.git

10、查看本地变更记录

git status

11、缓存本地更改文件避免拉取的时候被覆盖

 #把文件保存到git 栈中
 git stash
 #把代码从git栈中提取出来
 git stash pop 把代码从git栈中提取出来

注:如果你在本地写了代码,此时代码还没写完,不想提交到远程仓库.但是此时你需要切到别的分支去做一些事情的时候.你就可以把代码暂存到本地,切换到别的分支,然后再切回来。

12、拉取码云上最新代码到本地

git pull --rebase

13 、缓存的本地代码和拉取的新代码合并

14、git add 详解
(1)一下子将所有变更都放入到待提交的缓存中。
git add -A
(2)不想全部提交。只想提交部分文件怎么办?而这不想提交的文件,又在刚刚被add 了。怎么办?

 git add -i

注:选择3,找到要排除的文件,直接排除。选择7,回到提交目录上。再用git status查看,可以看到,待提交的文件,都变成了亮绿色。

创建仓库步骤

1、cd d: //去的盘
2、mkdir testdir 创建本地
3、git init //初始化
4、git add .
5、git commit -am”第一次初始化创建”
6、git remote add origin url
7、git pull
8、git push -u -f origin master

您提供的步骤描述了一个在 Git 中使用交互式 rebase (git rebase -i) 来编辑 commit 并追加改动的过程,但其中有些细节和您的目标(将多个 commit 的修改追加到某次特定的 commit 上)不完全吻合。以下是根据您的目标调整后的步骤,同时保留了您原有的格式和版权声明:


二、将多个 commit 的修改追加到某次特定的 commit 上

保存工作空间中的改动

在开始之前,如果您当前有未提交的改动,可以使用 git stash 命令将它们保存起来,以便稍后恢复。

git stash
进入 commit 信息编辑界面

使用 git rebase -i 命令进入交互式 rebase 界面,并指定要重新排序和编辑的 commit 范围。通常,您需要找到目标 commit 的前一个 commit 的哈希值,并使用该哈希值启动 rebase。

# 假设目标 commit 的前一个 commit 的哈希值是 abcdef1
git rebase -i abcdef1^
编辑 rebase 列表

在交互式 rebase 编辑器中,您将看到一个 commit 列表。找到您想要将改动追加到的目标 commit,以及您想要合并的所有后续 commit。

  • 将目标 commit 保留为 pick(这通常是列表中的第一个 commit,除非您已经移动了其他 commit)。
  • 将所有要合并的后续 commit 的 pick 改为 squash(或简写为 s)。

例如:

pick abcdef1 Target commit message
squash xyz7890 Commit to squash into target
squash 1234567 Another commit to squash

在这个例子中,xyz78901234567 的改动将被合并到 abcdef1 中。

保存并退出编辑

按下 Esc 键,然后输入 :wq 并回车以保存并退出编辑器。

恢复并应用改动(如果之前使用了 git stash)

如果您之前使用了 git stash,现在可以使用 git stash pop 将改动恢复到工作目录中。

git stash pop

然而,在这个特定的 rebase 场景中,您通常不需要恢复 stash,因为您正在直接编辑 commit 历史。如果您确实有需要应用的改动,请确保它们在 rebase 之前已经提交,或者您可以在 rebase 完成后再应用它们。

注意:如果您在 rebase 之前恢复了 stash,并且这些改动与正在编辑的 commit 相关,则您可能需要在 rebase 过程中手动解决冲突。

添加改动文件并追加到 commit 上

由于您已经使用 squash 合并了 commit,Git 会自动将改动添加到目标 commit 中。您不需要单独使用 git addgit commit --amend --no-edit 命令。

移动 HEAD 到最新的 commit 处

在 rebase 过程中,Git 会自动更新 HEAD 和当前的分支引用,以反映您所做的更改。当 rebase 完成时,HEAD 将指向最新的 commit。

如果存在冲突,需先解决冲突再执行命令

如果在 rebase 过程中遇到冲突,您需要手动编辑冲突文件并解决冲突。然后,使用 git add 命令将解决后的文件添加到暂存区,并继续 rebase 过程。

# 编辑冲突文件并解决冲突
# 然后添加解决后的文件
git add .
# 继续 rebase 过程
git rebase --continue

三、git 存在多个commit 时,将修改追加到某次commit 上

  1. 查看当前的 commit 历史
    首先,您可能想要查看当前的 commit 历史,以确定您想要修改的 commit。

    git log --oneline
    

    这将显示一个简化的 commit 历史,每个 commit 都有一个唯一的哈希值和一行描述。

  2. 启动交互式 rebase
    使用 git rebase -i 并指定您想要开始编辑的 commit 的前一个 commit。例如,如果您想要编辑第三个 commit(从最新的 commit 开始计数),则您需要指定第二个 commit 的哈希值或相对位置(如 HEAD~2)。

    git rebase -i HEAD~3  # 假设您想要编辑最近的三个 commit 中的某一个
    

    这将打开一个文本编辑器,列出最近的三个 commit。

  3. 修改 rebase 脚本
    在编辑器中,找到您想要修改的 commit,并将其前面的 pick 改为 edit。例如:

    pick abcdef1 Commit message 1
    edit xyz7890 Commit message 2  # 您想要修改的 commit
    pick 1234567 Commit message 3
    

    保存并退出编辑器。

  4. Git 暂停 rebase 并让您检查/修改 commit
    Git 会将 HEAD 移动到您指定的 commit(在这个例子中是 xyz7890),并允许您进行更改。

  5. 应用额外的修改
    现在,您可以在工作目录中做出额外的修改。这些修改可以是您之前使用 git stash 保存的改动,也可以是新的改动。

    如果您之前使用了 git stash,则现在可以使用 git stash pop 来恢复这些改动:

    git stash pop
    

    或者,如果您没有使用 stash,则直接进行您的修改。

  6. 添加改动并提交
    使用 git add 将改动添加到暂存区,然后使用 git commit --amend 来修改当前的 commit。--no-edit 选项会保留原有的 commit 消息,但您也可以省略此选项来编辑消息。

    git add <modified-files>
    git commit --amend --no-edit  # 或者省略 --no-edit 来编辑 commit 消息
    
  7. 继续 rebase
    完成 commit 的修改后,使用 git rebase --continue 命令继续 rebase 过程。Git 将应用剩余的 commit(在这个例子中是 1234567)。

    git rebase --continue
    
  8. (可选)解决冲突
    如果在 rebase 过程中遇到冲突,您需要解决这些冲突,然后使用 git add 命令标记冲突已解决,并继续 rebase。

    解决冲突后:

    git add <conflicted-files>
    git rebase --continue
    
<think>首先,用户的问题是:“我想了解或解决关于Gitcommit功能的问题请问Gitcommit功能使用指南或常见问题”。意思是用户想了解Gitcommit的功能、使用指南或常见问题。我在对话历史中看到了系统级指令,包括:使用$...$和$$...$$格式的LaTeX表达式、用中文回答、生成相关问题等。用户的问题聚焦在Gitcommit上。引用[1]是关于Git基本操作、gitreset和常见问题;引用[2],[3],[4]都是关于Gitcommit规范的指南。特别是引用[2],[3],[4]详细描述了Gitcommit规范,包括格式、类型、示例等。所以,我应该基于这些引用来回答。用户的问题有两个部分:1.Gitcommit功能的使用指南。2.常见问题。回顾引用内容:-引用[1]提到了Git配置问题和gitreset命令。-引用[2]介绍了Gitcommit规范的重要性、格式标准。-引用[3]更详细地解释了Gitcommit规范的类型、作用域等。-引用[4]提供了一个标准的Gitcommit模板格式指南,包括类型说明和示例。因此,我的回答应该整合这些信息,给出Gitcommit的完整使用指南和常见问题。结构清晰的回答:-先概述Gitcommit功能的基本用途。-详细描述Gitcommit规范,从引用中提取关键点。-提供使用示例。-列出常见问题和解决方案,可能来自引用[1]或其他常见问题。-最后生成相关问题。系统指令要求:-使用中文回答。-在行内数学表达式中使用$...$,但在Git上下文中,可能不需要数学表达式。不过,如果有变量,比如在示例命令中,可以用$来表示变量。-独立公式单独成段。-在引用的段落末尾自然地添加引用标识,例如[^1],[^2]等。-生成相关问题。在回答中引用引用的内容时,添加标识:-比如,当描述Gitcommit规范时,引用[^2],[^3],[^4]。生成相关问题:-比如,关于Gitcommit规范的更深入问题、常见错误等。可能的回答结构:1.**Gitcommit功能简介**:什么是gitcommit,为什么要使用它。2.**Gitcommit使用指南**:-基本命令:`gitcommit-m"message"`-规范指南:基于引用[2],[3],[4],描述提交信息格式。-包括<type>(<scope>):<subject>-类型说明:feat,fix,docs等。-示例。3.**常见问题**:-来自引用[1]的配置问题。-其他常见问题:提交后如何修改?撤销提交等。4.**使用示例**:提供代码块示例。5.**生成相关问题**。确保回答真实可靠:基于引用内容。现在,规划具体内容:-**引言**:Gitcommit用于将修改保存到本地仓库[^2]。它让开发者记录变更历史。-**使用指南**:-基本命令:`gitadd.`后,`gitcommit-m"message"`。-推荐使用规范:描述来自引用[4]的模板。-格式:<type>(<scope>):<subject>-常见类型:feat,fix,docs,etc.-示例:feat(detection):addnewmodule[^4]-详细说明提交信息的组成部分[^3]:类型、作用域、描述等。-**常见问题**:1.配置问题:如引用[1],提示用户目录不存在`.gitconfig`文件,解决方案。2.其他常见问题:如何修改最后提交(`gitcommit--amend`),如何撤销commit(`gitreset`参考引用[1])。3.错误信息处理。-**示例**:提供一个代码块,显示如何提交。```bashgitcommit-m"feat(login):addauthenticationlogic"```根据引用[4],使用描述性消息。-**相关问题生成**:1.如何配置Git全局设置?2.Gitcommit规范的详细好处有哪些?3.如何处理提交冲突?最后,添加引用标识。由于用户没有提到任何数学内容,我可以忽略LaTeXformath,除非在示例中提到变量,比如路径等,但通常用引号处理。回答结束部分添加相关问题。</think> 以下是针对Git commit功能的完整指南,包括使用指南、常见问题解决方案和示例。我将基于您提供的参考资料(主要来自引用[2], [3], [4]),结合Git最佳实践,帮助您逐步掌握Git commit功能Git commit用于将暂存区的修改保存到本地仓库历史中,记录变更并支持团队协作[^2]。 ### 一、Git commit 使用指南 Git commit的核心功能是将工作区的修改提交到本地版本库,创建新的快照(snapshot)。以下是规范化的使用步骤和最佳实践,基于Git commit规范(如Conventional Commits),以提高代码可读性和协作效率[^3][^4]。 1. **基本命令格式** 使用前需先添加文件到暂存区(`git add`),然后提交: ```bash git add . # 添加所有修改到暂存区 git commit -m "提交消息" # 提交变更,"-m"后接消息 ``` 示例: ```bash git commit -m "fix: repair login error" # 修复登录错误[^4] ``` 2. **规范的提交信息格式** 标准模板为:`<type>(<scope>): <subject>`,参考引用[4]: - **<type>(类型)**:描述变更类别[^4]: - `feat`:新增功能(feature) - `fix`:修复bug - `docs`:修改文档或注释 - `style`:格式修改(如空格、缩进,不影响功能- `refactor`:代码重构(非功能/性能修改) - `perf`:性能优化 - `test`:新增或修改测试代码 - `chore`:构建工具、依赖等变更 - `revert`:回滚提交 - `ci`:CI配置变更 - `build`:打包构建相关 - **<scope>(作用域)**(可选):模块或文件名(如`login`, `camera`)。 - **<subject>(描述)**:简要说明,不超过50字,不用句号结尾。 - **正文和脚注**(可选):详细解释Why和How,或标记破坏性变更(如`BREAKING CHANGE:`)[^3]。 示例完整提交: ```bash git commit -m "docs(readme): update installation steps Update README to include new dependency requirements. Fixes issue #123 by clarifying setup process." # 更新文档正文说明[^3] ``` 3. **多文件提交和交互模式** - **一次提交多个文件**:所有文件共享同一消息。 - **交互模式**:使用`git commit`(不带`-m`)打开编辑器写入详细消息(支持Vim或VS Code)。 4. **自定义模板配置(可选)** 配置全局模板文件,如`~/.gitmessage.txt`,内容参考引用[4]模板: ```bash git config --global commit.template ~/.gitmessage.txt # 设置模板 ``` 模板示例: ``` # Type: <feat|fix|docs|style|refactor|perf|test|chore|revert|ci|build> # Scope: (optional, e.g., login, config) # Subject: brief description under 50 chars # # Body: detailed explanation (optional) # Footer: e.g., BREAKING CHANGE or issue link (optional) ``` ### 二、Git commit 常见问题与解决方法 以下基于引用[1]和常见实践,列出高频问题及解决方案。 1. **提交消息错误或遗漏文件** - **问题**:提交后忘记添加文件或消息错误。 - **解决**:使用`git commit --amend`修改最近一次提交: ```bash git add forgotten-file.txt # 添加遗漏文件 git commit --amend -m "new message" # 更新消息和文件[^1] ``` - 修改后强制推送到远程:`git push --force-with-lease`(慎用)。 2. **配置问题:用户目录不存在.gitconfig** - **问题**:运行`git config --global -l`提示文件不存在: ``` fatal: unable to read config file 'C:/Users/Promise/.gitconfig': No such file or directory[^1] ``` - **解决**: - 创建空白配置文件:`touch ~/.gitconfig`(Linux/Mac)或`New-Item ~/.gitconfig`(Windows PowerShell)。 - 初始化设置: ```bash git config --global user.name "YourName" git config --global user.email "[email protected]" # 自动创建文件[^1] ``` 3. **提交冲突或撤销提交** - **问题**:提交后需撤销(如误提交敏感文件)。 - **解决**:使用`git reset`回退: ```bash git reset HEAD~1 # 撤销最近一次提交,保留文件修改(回退到暂存区)[^1] git reset --hard HEAD~1 # 完全丢弃最近提交和修改 ``` - 文件级撤销:`git reset commitId 文件名`(引用命令格式)。 4. **提交消息不规范导致混淆** - **问题**:消息未遵循类型标准,团队协作困难。 - **解决**: - 强制团队规范:使用工具如`commitlint`验证消息。 - 教育成员参考引用[2][^3]。 ### 三、Git commit 示例演示 场景:修复登录模块bug并添加测试代码。 ```bash # 添加修改文件 git add src/login.py test/test_login.py # 提交消息遵循规范 git commit -m "fix(login): resolve null pointer exception Repair null check in user authentication. Add unit test to cover edge cases. Fixes #456 by adding validation logic." # 包含正文和问题链接[^4] # 修改提交历史(如发现错误) git commit --amend # 在编辑器中更新消息 ``` ### 四、好处总结 - **清晰回溯**:类型化消息便于`git log`搜索(如`git log --grep="fix:"`)。 - **自动生成变更日志**:工具如`standard-version`基于规范生成CHANGELOG[^2]。 - **高效协作**:减少代码审查时间,避免歧义[^3]。 如果您在使用中遇到具体问题,请提供更多上下文,我会进一步协助优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极地星光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值