免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3021 | 回复: 9
打印 上一主题 下一主题

[其他] git: .git 下出现一个提交是什么意思 [复制链接]

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-29 18:47 |只看该作者 |倒序浏览
本帖最后由 zylthinking 于 2012-09-29 19:08 编辑

似乎是我之前什么时候的一个提交, 但不明白怎么出现在这里
做过一个 rebase 操作,

  1. git rebase --onto ed38f3c873a <start commit> master
复制代码
然后中间发现冲突太多, 而且, 是每应用一个提交, 都会引起 conflict, 为了省事,

  1. git reset --hard
  2. git co master
  3. git reset --soft ed38f3c873a
  4. git ci -am " video commit"
  5. git rebase --onto ed38f3c873a master~1 master
复制代码
操作完毕后,  又做了些修改, 做了个提交

  1. git ci -am " code adjust"
复制代码
从而形成的log如下:


回到家后
  1. 2000  git pull
  2. 2001  git reset --hard origin/master
复制代码
然后就发现.git 下这个提交了
  1. zylthinking@linux:~/code/libx/.git$ ls
  2. 0e460d97  branches  COMMIT_EDITMSG  config  description  FETCH_HEAD  HEAD  hooks  index  info  logs  objects  ORIG_HEAD  refs
复制代码
而且, 似乎这个提交和  origin/master 具有相同的父提交,   diff 也没有任何不同
  1. zylthinking@linux:~/code/libx/.git$ git diff 0e460d97 HEAD
  2. zylthinking@linux:~/code/libx/.git$
复制代码
搞不明白这是怎么回事了, 手工删除不会有问题吧?

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
2 [报告]
发表于 2012-09-29 19:03 |只看该作者
不对, 这个 0e460d97 不知道到底是不是一个提交:
  1. zylthinking@linux:~/code/libx/.git$ git rev-parse 0e460d97
  2. 708f4a8cac5342c76b0d0a6f1578a77b6ae294b1
  3. zylthinking@linux:~/code/libx/.git$ git rev-parse HEAD
  4. 708f4a8cac5342c76b0d0a6f1578a77b6ae294b1
  5. zylthinking@linux:~/code/libx/.git$ cat 0e460d97
  6. ref: refs/heads/master
复制代码
这是什么意思???

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
3 [报告]
发表于 2012-09-29 19:04 |只看该作者
我也不明白怎么回事。。。
不过手工删除有没有问题倒是很好解决的。。。


就像gc一样, git会从一个根集合开始(.git/refs/... 比如),它们会记录commit object的sha1。
这些commit object又会记录
1. tree。
也是通过sha1命名,放到.git/objects。
tree又会记录若干blob,就是实际文件了。
2. parent
就是其他commit object。
3. timestamp
错当成手机号了。。。 还去查了查归属地。。。

只要从根集合开始能被访问到,git就不会将它们删除,随时都可以找回。


嗯,废话说多了。手工删除的判断依据就是比较一下FETCH_HEAD, ORIGN 记录的sha1与master, origin/master记录的是不是一样。
是一样就可以删了。
不一样么。。。 可以先用一个branch记录一下避免丢失。。。 然后再回想到底发生了什么事。。。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
4 [报告]
发表于 2012-09-29 19:11 |只看该作者
本帖最后由 zylthinking 于 2012-09-29 19:19 编辑
OwnWaterloo 发表于 2012-09-29 19:04
我也不明白怎么回事。。。
不过手工删除有没有问题倒是很好解决的。。。


我其实是想高明白这个到底是什么, 似乎是一个提交, 但 rev-parse 的结果确实 master, 两者的关联记录在它的内容中。
这样的话, 似乎和 HEAD 相同, 是一个指针, 但这个指针却不知用来做什么的

但我估计应该是个中间文件, 多半是回家 git pull 后, 因为在公司做了 rebase 导致了冲突, 这个或许是用来解决冲突用的?
而我只是简单的 reset 到 origin/master 上, 也就是公司的版本上。 因为实际上, 我本地版本就是 rebase 前的 master, 因此可以放心这么干, 但是不是由于这样导致了冲突状态的中间文件没有删除干净(MERGE_HEAD 这些文件却是通过 reset --hard 给删除了的)???  

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
5 [报告]
发表于 2012-09-29 19:23 |只看该作者
靠, 错了错了, 完全和这次操作没关系, 他娘的不知道之前因为什么留下的
  1. zylthinking@linux:~/code/libx/.git$ ls 0e460d97  -l
  2. -rw-rw-r-- 1 zylthinking zylthinking 23  6月 18 23:46 0e460d97
复制代码

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
6 [报告]
发表于 2012-09-29 19:27 |只看该作者
回复 4# zylthinking

我也不明白为什么会这样。。。
如果我碰到这种诡异的情况的话。。。
我就先确认哪些是需要保留的(比如master,还有可能包含你想rebase但放弃了的那个)。
然后在本地创建一个新的仓库,将需要保留的拉到这边。 然后把原来那个目录删掉,管他中间不中间,反正需要的已经拉过来了。。。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
7 [报告]
发表于 2012-09-29 19:32 |只看该作者
回复 5# zylthinking

嗯。。。
没在 .git/ 这个目录下见过这样的文件。
我猜应该 .git/refs/head/ 下也有一个叫 0e460d97 的文件, 但内容是708f4a8cac5342c76b0d0a6f1578a77b6ae294b1。
所以 git rev-parse 0e460d97 才会成功。
其实是被当作了 git 的一个分支。
git branch 应该有它。

但反正它和HEAD是一样, git branch -d 0e460d97  就可以把它( .git/refs/head/0e460d97 ) 删掉。
而 .git/0e460d97 确实不知道是怎么回事。。。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
8 [报告]
发表于 2012-09-29 19:36 |只看该作者
本帖最后由 zylthinking 于 2012-09-29 19:48 编辑
OwnWaterloo 发表于 2012-09-29 19:32
回复 5# zylthinking

嗯。。。

分支不可能放在.git 根目录下, 很显然它是一个分支的引用, 完全和 HEAD相同, 包括内容的语法, 或者说将 HEAD删除, 把它改名HEAD, 那他就是 HEAD, git branch 里面没有任何其他分支
zylthinking@linux:~/code/libx/.git$ ls refs/heads/
master

快三个月之前弄出来的这么一个玩意, 今天才发现, 没办法找原因了
恩, 我记起来了, 之前我丢弃过一部分历史, 做了一个根提交, 估计是那个时候产生的

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
9 [报告]
发表于 2012-09-29 20:11 |只看该作者
zylthinking 发表于 2012-09-29 19:36
git branch 里面没有任何其他分支
zylthinking@linux:~/code/libx/.git$ ls refs/heads/
master


那这条命令和他的结果就不知道该怎么解释了。。。
zylthinking@linux:~/code/libx/.git$ git rev-parse 0e460d97
708f4a8cac5342c76b0d0a6f1578a77b6ae294b1

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
10 [报告]
发表于 2012-09-29 20:21 |只看该作者
OwnWaterloo 发表于 2012-09-29 20:11
那这条命令和他的结果就不知道该怎么解释了。。。


算了, 估计是它没找到 commit 就去其他的了; 和 git rev-parse HEAD 走的一条路线, 只是没 if(0 == strncmp(name, "HEAD", 4)) 而已。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP