心无定所,缥缈虚无。
序
这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战
- 手记 | MobPush 接入总结
- Gradle 手记|盘点我使用过的 build 基本配置(不断更新中。。。
- Git 手记 | 总结个人日常开发常用到的一些命令(不断更新。。。
不瞒各位大佬,我想混个杯子,杯子被猫猫干碎了...
(2020 本命年得草稿箱,看看能墨迹到啥时候发表)
其实到现在为止,Git 上手 easy 的一匹,网上各路大神的文章比比皆是。但是个人对于其中的含义和理解,依旧提留在表面。
而 Git 可视化工具的泛滥,却进一步降低了 Git 的使用难度,因为很多时候,工作遇到的一些场景,我们只需要鼠标点点点就好啦!看不懂英文,没关系,提供中文版,好骚~
可我还是觉得鸡老大行云流水敲出一个又一个我不懂的命令贼高大上,跟随老大,慢慢成长。
这里附上我工作日常用到的一些命令,不忙的时候大家可以尝试自己敲敲,闭上眼感受大佬。哈哈哈~
顺序有点乱,就不一一分类整理了。毕竟也是在草稿箱中吃灰多年了,重见天日就好...
推荐官方提供的关于 Git 的备忘单以及 CheatSheet:
- GitHub Git 备忘单
- CheatSheet
1、commit 后,发现描述不对,怎么办?
以下小命令妥妥拯救你:
- git commit --amend
在当前项目中打开命令行,键入以上命令后,提示如下:
随后输入字母 i 开始对描述进行更改。
更改完成,点击 esc,随后输入英文 :wq 回车保存,此时查看提交信息发生改变,并且 hash 值也发生了改变。
2、push 后,发现描述不对,怎么办?
第一种情况针对仅仅提交本地暂存区,并没有实际推送到远程仓库,那么针对如果对于已提交并推送远程的 commit 信息如何修改呢?
这里提供两种方式:
2.1 修改最近一次已推送远程 commit 信息
依旧可使用以下命令:
- git commit --amend
由于当前变更仅仅为本地,所以还需要推送远程仓库,如下命令:
- git push -f
因为我默认就在 master,所以这里直接偷个懒。
2.2 修改已推送远程多条 commit 信息
这里附上操作步骤:
Step 1:确认当前要修改几条历史 commit:
- git rebase -i HEAD~[要修改的条数]
Step 2:按照提示修改对应的 commit:
操作方式同样如上:
- 输入字母 i 开始对描述进行更改。更改完成,点击 esc,随后输入英文 :wq 回车保存。
Step 3:按照提示合并当前修改内容:
- git rebase --continue
Step 4:推送远程仓库:
- git push -f origin master
以及最终个人的操作示意图:
3、检出指定版本
获取 commit hash 值方式:
- 通过 git log 查看指定 commit 对应的 hash 值;
- 借助工具 Sourcetree 查看指定 commit 的 hash 值。
通过以下命令直接 checkout:
- git checkout [commit hash]
最后通过以下命令将本次 checkout 内容本地新建分支:
- git switch -c [分支名称]
4、丢弃本地已修改内容 - 未添加到暂存库
如下所示:
本地修改了两个文件,但是现在我不需要它了,怎么丢弃?
仔细观察后发现,git 已经帮我们提示了对应丢弃命令:
- git restore [文件具体路径]
如下所示:
很明显的看到了 Question349 这个类修改状态已经没有了。
5、丢弃本地新增加的文件 - 未添加到暂存库
使用 git status 查看当前项目文件状态,如下所示:
因为没有添加到暂存库,也就是没有使用 git add . 命令,所以这里直接通过 rm 将文件删除即可:
- rm [文件具体地址]
如下所示:
6、正常情况下的更新代码流程
这里指的正常情况下的更新的含义是,独立开发,未有冲突情况下。
- git status :查看本地文件状态
- git pull --rebase origin [分支名称] :拉取并通过 rebase 合并代码
操作图如下:
7、git 修改本地 branch 名称并推送远程
将旧的分支名修改为新的分支名:
- git branch -m [old branch] [new branch]
删除旧分支:
- git push --delete origin [old branch]
将新分支推送远程仓库:
- git push origin [new branch]
将本地分支与远程分支进行关联:
- git branch --set-upstream-to origin/[new branch]
8、如何一个分支的 commit 合并到 另一个分支呢?
如下图所示,目前我们在 branch-1.0.0 fix bug,如何将这个单条 commit 合并到 master 呢?
首先复制右下角当前 commit 到 hash 值,随后切换到 master 分支,执行如下命令:
- git cherry-pick [commit hash]
之后就可以看到这条 commit 已经合并到当前 master 分支了,随后进行提交即可~
9、如何丢弃已提交并推送的内容?未产生新的 commit 记录。
假设你突然发现,你刚刚推送远端的代码是有问题的,那么如何撤销呢?
- git reset --hard HEAD~
此时会自动回到上一次提交的节点,而我们刚刚提交的 fix bug 也消失不见了。
10、如何丢弃已提交并推送的内容并产生新的 commit 记录呢?
第 9 条个人感觉其实用处并不大,毕竟要存留每一次的提交记录,总不能一个撤销无影无踪?
所以更推荐如下操作法:
- git revert HEAD
此时会进入 commit 进行编辑页,完之后 Shift + wq! 保存并退出,看到 git 输出如下日志:
heliquan@Mac ~/CodePro/HLQ-Pro/Android/JenkinsPro branch-1.0.0 ● git revert HEAD
[branch-1.0.0 599d003] Revert "Fix bug"
1 file changed, 1 deletion(-)
随后便会多出一条撤销记录:
11、push 提示鉴权错误
✘ heliquan@Mac ~/CodePro/HLQ-Pro/Android/BluetoothPro master git push -u origin master
Username for 'https://github.com': HLQ-Struggle
Password for 'https://HLQ-Struggle@github.com':
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: 'https://github.com/HLQ-Struggle/BluetoothPro.git/' 鉴权失败
可能是 token 过期到期导致,重新生成一下:
之后就可以正常推送了~
✘ heliquan@Mac ~/CodePro/HLQ-Pro/Android/BluetoothPro master git push -u origin master
Username for 'https://github.com': HLQ-Struggle
Password for 'https://HLQ-Struggle@github.com':
枚举对象: 3, 完成.
对象计数中: 100% (3/3), 完成.
写入对象中: 100% (3/3), 230 字节 | 230.00 KiB/s, 完成.
总共 3 (差异 0),复用 0 (差异 0)
To https://github.com/HLQ-Struggle/BluetoothPro.git
* [new branch] master -> master
分支 'master' 设置为跟踪来自 'origin' 的远程分支 'master'。
参考资料
- Git