Git 日常
关于user.name和user.email
Git用户名和邮箱地址主要用于标识提交记录的作者信息,确保版本控制的可追溯性和团队协作的规范性。
每次提交都会记录用户名和邮箱作为作者信息,便于追踪修改责任归属。在团队协作或开源项目中,这些信息帮助他人识别提交者身份,确保代码质量控制。
对于GitHub、GitLab等平台,邮箱地址用于将提交记录与用户账户绑定。若未配置正确的邮箱,可能导致提交信息显示为“匿名”或无法关联个人账号。
- 全局配置(适用于所有仓库):
git config --global user.name "用户名"
git config --global user.email "邮箱地址"
- 局部配置(仅适用于当前仓库):
git config user.name "用户名",
git config user.email "邮箱地址"
未配置时,Git可能使用系统默认信息(如操作系统用户名或主机名),但可能导致身份信息缺失或提交被拒。
查询当前配置信息可以使用以上命令,不带后面参数。
一、正常流程
1.拉取并创建分支(本地)
git checkout -b dev origin/dev
2.开始新功能前先pull一次再在其基础上创建新分支
git pull
git checkout -b feature-new
3.修改
变动工作区(.git所在目录)内容
4.添加
将修改内容(如 xxx.java)添加至暂存区为提交做准备:
git add xxx.java
5.提交
将暂存区内容提交至本地仓库:
git commit -m "备注"
6.更新
更新目标分支,切换至目标合并分支(dev),pull,为合并做准备:
git checkout dev && git pull
7.合并分支
git merge feature-new
8.推送
将合并内容推送至远程分支:
git push
二、异常流程(提交了不该提交的内容)
1.提交未推送
git log --oneline // 查看日志,找到目标commit-hash
git reset --mixed <commit-hash> // 参数可以是soft(软重置)、mixed(混合重置)、hard(硬重置)
- soft:将HEAD移动到指定的提交,但不会改变暂存区和工作目录的内容;
- mixed(默认):移动HEAD到指定的提交,并重置暂存区到该提交的状态,但不会改变工作目录的内容;
- hard:彻底丢弃指定提交之后的所有更改(包括暂存区和工作目录中的更改)。
警告:使用–hard选项会丢失未提交的更改,因此请确保你真的想要这么做,并且已经做好了相应的备份。
2.提交已推送
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 分支,执行以下命令:
git pick-cherry xxx
该命令会将 feature-branch 上某次提交(xxx)单独合并到当前分支(master)。
四、其它
比对工作区与暂存区中文件的差异
git diff readme.txt
比对暂存区与本地版本库中文件的差异
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 可帮助快速定位历史版本。
