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 可帮助快速定位历史版本。 ‌

相关推荐
CryptoRzz12 分钟前
StockTV API 对接全攻略(股票、期货、IPO)
java·javascript·git·web3·区块链·github
-拟墨画扇-1 小时前
Git | 远程仓库操作
git·gitee·github
NuageL2 小时前
第一次用Git协作流程记录和踩坑
git
特级业务专家4 小时前
这下发布不需要Jenkins了
linux·git·docker
0和1的舞者4 小时前
Git 实战踩坑:如何让多个 IDE 项目共用一个远程仓库(附子模块问题解决)
git·开发·仓库·码云·子模块·操作·冲突
妖孽白YoonA6 小时前
Git Worktree:同时处理多个分支的正确姿势
git
-拟墨画扇-6 小时前
Git | 配置别名操作
git·gitee·github·gitcode
-拟墨画扇-7 小时前
Git | 多人协助策略
git·gitee·github·gitcode
BestOrNothing_20157 小时前
Git 原理彻底讲透:工作区 / 暂存区 / 本地仓库 / origin 一次理清(VSCode 可视化 + 实战避坑)
git·分支开发·fetch / merge·add / commit·pull / push·工作区/暂存区/本地仓库
Huazzi.7 小时前
使用Scoop安装Git
git·elasticsearch·gitee·ssh·github·scoop