Git 日常

关于user.name和user.email

Git用户名和邮箱地址主要用于标识提交记录的作者信息,确保版本控制的可追溯性和团队协作的规范性。

每次提交都会记录用户名和邮箱作为作者信息,便于追踪修改责任归属。在团队协作或开源项目中,这些信息帮助他人识别提交者身份,确保代码质量控制。

对于GitHub、GitLab等平台,邮箱地址用于将提交记录与用户账户绑定。若未配置正确的邮箱,可能导致提交信息显示为"匿名"或无法关联个人账号。

  • ‌全局配置‌(适用于所有仓库):
shell 复制代码
git config --global user.name "用户名"
git config --global user.email "邮箱地址"
  • ‌局部配置‌(仅适用于当前仓库):
shell 复制代码
git config user.name "用户名",
git config user.email "邮箱地址" ‌

未配置时,Git可能使用系统默认信息(如操作系统用户名或主机名),但可能导致身份信息缺失或提交被拒。

查询当前配置信息可以使用以上命令,不带后面参数。

一、正常流程

1.拉取并创建分支(本地)

shell 复制代码
git checkout -b dev origin/dev

2.开始新功能前先pull一次再在其基础上创建新分支

shell 复制代码
git pull
git checkout -b feature-new

3.修改

变动工作区(.git所在目录)内容

4.添加

将修改内容(如 xxx.java)添加至暂存区为提交做准备:

shell 复制代码
git add xxx.java

5.提交

将暂存区内容提交至本地仓库:

shell 复制代码
git commit -m "备注"

6.更新

更新目标分支,切换至目标合并分支(dev),pull,为合并做准备:

shell 复制代码
git checkout dev && git pull

7.合并分支

shell 复制代码
git merge feature-new

8.推送

将合并内容推送至远程分支:

shell 复制代码
git push

二、异常流程(提交了不该提交的内容)

1.提交未推送

shell 复制代码
git log --oneline // 查看日志,找到目标commit-hash
git reset --mixed <commit-hash> // 参数可以是soft(软重置)、mixed(混合重置)、hard(硬重置)
  • soft:将HEAD移动到指定的提交,但不会改变暂存区和工作目录的内容;
  • mixed(默认):移动HEAD到指定的提交,并重置暂存区到该提交的状态,但不会改变工作目录的内容;
  • hard:彻底丢弃指定提交之后的所有更改(包括暂存区和工作目录中的更改)。

警告:使用--hard选项会丢失未提交的更改,因此请确保你真的想要这么做,并且已经做好了相应的备份。

2.提交已推送

shell 复制代码
git checkout feature-branch // 切换要回退的到本地分支
git log						// 查看提交历史
git revert <commit-hash>    // 回退到指定的commit
git push origin feature-branch --force 或 git push -f origin feature-branch  // 推送更改到远程仓库
  • 区别总结:
    目的‌ :git reset主要用于重写历史(例如,撤销提交或将分支指针移动到不同的位置)。git revert主要用于在不改变历史的情况下"撤销"某些提交的更改。
    ‌副作用‌ :使用git reset --hard会丢失未提交的更改。使用git revert不会丢失任何数据或更改,因为它实际上是在添加一个新的提交来"抵消"之前的更改。
    历史记录‌:git reset会重写历史记录,而git revert不会改变现有的历史记录,它通过添加新的提交来"取消"之前的更改。
  • 使用场景:
    • git reset 适用于需要撤销更改但不希望创建新的提交的情况,或者需要完全删除更改的情况。
    • git revert 适用于需要撤销特定提交但希望保留完整历史记录的情况,尤其是在多人协作的项目中。

三、优选(cherry pick)

当想要将特定的 commit 合并至某分支时,可以使用 cherry pick 功能。比如,feature-branch 中某次提交需要提前发布到正式版本,则可以使用 git log 查看并记录下该次提交哈希码,然后切换到 master 分支,执行以下命令:

shell 复制代码
git pick-cherry xxx

该命令会将 feature-branch 上某次提交(xxx)单独合并到当前分支(master)。

四、其它

比对工作区与暂存区中文件的差异

shell 复制代码
git diff readme.txt

比对暂存区与本地版本库中文件的差异

shell 复制代码
git diff --cached readme.txt

git log 和 git reflog

git log:显示提交日志,默认按时间倒序显示从当前分支到指定分支的提交记录。 ‌

常用选项‌:

--decorate:显示分支名称和标签 ‌

--name-only:仅显示文件名 ‌

--oneline:精简显示提交信息 ‌

--graph:以图形化方式显示历史 ‌

git reflog‌:管理引用日志(reflog),记录分支或引用更新的历史版本。 ‌

常用操作‌:
查看引用日志 :git reflog ‌
回退版本 :git checkout <commit_id> 或 git reset <commit_id> ‌
删除引用日志:git reflog delete <old_oid> <new_oid> ‌

区别与联系:

用途‌ :git log 用于查看提交记录,git reflog 用于管理引用更新历史。

数据内容‌ :git log 包含文件名、日期等信息,而 git reflog 记录引用指向的版本变化。 ‌
关联性‌:回退版本时,git reflog 可帮助快速定位历史版本。 ‌

相关推荐
孤廖4 小时前
面试官问 Linux 编译调试?gcc 编译流程 + gdb 断点调试 + git 版本控制,连 Makefile 都标好了
linux·服务器·c++·人工智能·git·算法·github
Flash Dog14 小时前
git推送远程仓库
git
shuangrenlong14 小时前
git 快速批量cp某些提交到分支一次性合入
git
xiucai_cs16 小时前
【git】rebase 和 merge 区别及使用建议
git·rebase·merge
0和1的舞者1 天前
《Git:从入门到精通(八)——企业级git开发相关内容》
大数据·开发语言·git·搜索引擎·全文检索·软件工程·初学者
雨奔1 天前
Git工作流
git
妮妮喔妮1 天前
pycharm远程提交Git
ide·git·pycharm
m0_748255411 天前
深度掌握 Git 分支体系:从基础操作到高级策略与实践案例
大数据·git·elasticsearch
晟盾科技1 天前
git重写历史
git·1024程序员节