git - git 1.7.1 提交出现乱序
问题描述
以下帖子适用于可追溯到 2010 年的过时版本的 Git(版本 1.7.1——Centos 6 上的默认版本)。虽然显而易见的答案是简单地升级 git(我赞成这种做法),但我刚刚加入这个项目,团队负责人很关心稳定性。我怀疑 Git 1.7.1 已经严重损坏,并希望为升级提供理由。
我刚刚对我刚刚加入的一个项目进行了第一次提交,并且惊讶地发现 git log在我最近提交的内容之前插入了我的更改(SA)——另外还有一个复杂的问题是 TortoiseGit 属性更改由其他人(MH)对我来说。
git log --graph --oneline --decorate --pretty=format:"%cn committed %h on %cd"
结果:
* SA committed 3d67c9dd4 on Mon Feb 18 12:42:24 2019 +0000 ## SECOND COMMIT
* SA committed d6f0c4712 on Mon Feb 18 10:55:42 2019 +0000 ## FIRST PUSH (2 mins after FIRST COMMIT)
|\
| * MH committed c1ad3c336 on Thu Feb 14 17:07:01 2019 +0000
| * MH committed 7442f95dd on Thu Feb 14 15:03:46 2019 +0000
| * MH committed 417dc55e2 on Thu Feb 14 11:28:40 2019 +0000
| * MH committed 0eea851b1 on Thu Feb 14 11:27:01 2019 +0000
| * MH committed 72e0fa612 on Wed Feb 13 17:15:22 2019 +0000
| * MH committed 0e80cc9d6 on Wed Feb 13 17:06:50 2019 +0000
| * MH committed ac37fdf64 on Wed Feb 13 17:04:46 2019 +0000
| * MH committed cb1b84489 on Wed Feb 13 17:04:18 2019 +0000
| * MH committed f5026eee5 on Wed Feb 13 15:03:50 2019 +0000
| * MH committed 1ca37588f on Wed Feb 13 15:01:55 2019 +0000
| * MH committed cedcefd36 on Wed Feb 13 12:23:03 2019 +0000
| * MH committed 0bbd26524 on Wed Feb 13 08:39:33 2019 +0000
| * MH committed db8b7672c on Thu Feb 7 17:41:56 2019 +0000
| |\
| | * MH committed fca13dfe3 on Thu Feb 7 17:36:05 2019 +0000
| | * MH committed 704e2f3ff on Thu Feb 7 17:35:30 2019 +0000
| * | MH committed 1b34e745c on Thu Feb 7 17:41:20 2019 +0000 #### out of place
| |/
| * MH committed f77456930 on Wed Feb 6 11:43:29 2019 +0000
| * MH committed eb9849449 on Tue Feb 5 17:52:17 2019 +0000
| * MH committed 889f94b00 on Tue Feb 5 15:45:19 2019 +0000
| * MH committed ae4505a10 on Tue Feb 5 13:47:42 2019 +0000
| * MH committed 561c703b6 on Tue Feb 5 13:47:07 2019 +0000
| * MH committed 43b4941f8 on Tue Feb 5 13:45:01 2019 +0000
* | SA committed 2336ac0c7 on Mon Feb 18 10:53:49 2019 +0000 ## FIRST COMMIT -- sandwiched BETWEEN earlier commits!!!
|/
* MH committed 87fcf83a2 on Mon Feb 4 11:25:38 2019 +0000
* MH committed ea096edd3 on Fri Feb 1 17:12:01 2019 +0000
* MH committed c51cd83d3 on Fri Feb 1 10:27:52 2019 +0000
这是 git 1.7.1 的已知问题吗?
更新:我刚刚注意到 MH 所做的提交也不合适,树上看起来像树枝的东西完全是个谜。所有更改都在同一个分支上进行。
更新 2看似归因于我的令人困惑的提交(由 TortoiseGit 在 d6f0c4712 上)实际上是“与父 1 的差异”(无论这意味着什么)。我的实际提交在下面列出为“与父 2 的差异”。
解决方案
TL;博士
git log --date-order
或者
git log --date-order --graph --oneline --decorate --pretty=format:"%cn committed %h on %cd"
细节
我能够使用 Git 1.7.1 在 CentOS 6 机器上重现您的场景。(我们也有更新的 Git,但 1.7.1 版本仍然存在。)
当有合并提交时,Git(新旧)似乎认为被合并的分支更“新”,如果你这样想是有道理的:我对我的分支进行了更改,然后我合并了在别人的改变中,所以这是最后发生的事情。
简单的解决方案是提供--date-order
给git log
.
日期顺序:
$ git log --date-order --graph --oneline --decorate --pretty=format:"%cn committed %h on %cd"
* j committed c767018 on Tue Feb 19 06:40:26 2019 -0500
|\
* | j committed f0fe88c on Tue Feb 19 06:40:10 2019 -0500
| * j committed 29b783b on Tue Feb 19 06:39:55 2019 -0500
|/
* j committed c592f81 on Tue Feb 19 06:34:38 2019 -0500
不是日期顺序:
$ git log --graph --oneline --decorate --pretty=format:"%cn committed %h on %cd"
* j committed c767018 on Tue Feb 19 06:40:26 2019 -0500
|\
| * j committed 29b783b on Tue Feb 19 06:39:55 2019 -0500
* | j committed f0fe88c on Tue Feb 19 06:40:10 2019 -0500
|/
* j committed c592f81 on Tue Feb 19 06:34:38 2019 -0500
关于所有这些合并气泡的注释
在我的工作流程中,我不喜欢在历史中看到所有这些合并气泡。当我合并功能分支或错误分支时,我希望将其视为合并,但是当它只是master
我尚未推送的更改时,我会尽量避免它。您在“更新”下的注释表明您也不喜欢它,所以这是我的看法。
当您执行 agit pull
并且有尚未推送的本地提交时,默认情况下,Git(旧的和新的)会将远程更改合并到您的本地分支中,像我在上面重新创建的那样创建一个气泡,就像您的历史记录显示的那样。
为了避免这些,请git pull --rebase
改用。
我首选的工作流程:使用git fetch
,然后检查本地分支之间的差异,并origin
通过添加--all
到您的git log
命令中,然后git rebase origin
当您满意时,可以这样做。
git fetch
git log --all --date-order --graph --oneline --decorate ...
或者
git log master origin/master --date-order --graph --online --decorate ...
然后
git rebase origin
关于变基的通常警告适用:避免变基你之前推送的任何内容。对于仅存在于您的沙箱中的本地提交,这是一个好主意。
推荐阅读
- python-3.x - 更正 Spyder 5.0.5 中的调试启动错误
- authentication - TikTok登录工具包:成功验证后重定向不起作用
- java - 没有为我的块找到我的纹理文件,我遇到了同样的问题,但是一个项目的 json 文件,我在这里询问了这个问题并已修复
- php - 如何使用 php 检测 M1 iPad?
- node.js - 创建一个像 [name]/[second_name] 这样的 NPM 包?name 只能包含 URL 友好字符。“[second_name]”在哪里添加?
- python - 使用 ftplib 上传可恢复的 FTP 文件夹
- docker - 尝试连接到本地 Caddy 服务器时出现 SSL 错误
- python - Jupyter Notebook:cmd 错误访问被拒绝(Windows 10)
- wpf - HelixToolkit BillboardSingleImage3D 可以有 alpha 混合图像吗?
- snowflake-cloud-data-platform - 横向加入雪花