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

相关推荐
李少兄3 小时前
在 IntelliJ IDEA 中修改 Git 远程仓库地址
java·git·intellij-idea
先跑起来再说9 小时前
Git 入门到实战:一篇搞懂安装、命令、远程仓库与 IDEA 集成
ide·git·后端·elasticsearch·golang·intellij-idea
承渊政道12 小时前
Linux系统学习【Linux系统的进度条实现、版本控制器git和调试器gdb介绍】
linux·开发语言·笔记·git·学习·gitee
Doro再努力12 小时前
【Linux操作系统12】Git版本控制与GDB调试:从入门到实践
linux·运维·服务器·git·vim
摇滚侠15 小时前
MAC IDEA GIT 提交区显示了几个不存在的目录
git·idea
城东15 小时前
Git使用[远程仓库远端的head比本地和提交的head旧,其他人拉不到最新代码]
git·head·远程仓库远端·比本地和提交的head旧·其他人拉不到最新代码
何中应1 天前
使用SSH地址拉取远程仓库代码报下面的错误
git
何中应1 天前
Git本地仓库命令补充
git
sun0077001 天前
执行repo sync -c -d -j4以后,提交未git push的代码看不到了。要怎么恢复?
git
胖虎11 天前
Git 一个本地仓库同时推送到两个远程仓库(详细教程)
git·多远程仓库·双远程仓库·git双远程·git备份