我在一家小公司工作,我们的Git回购有点搞砸了.我刚刚做了一个git pull,我今天早些时候做出的改变都消失了!
当我在主分支上的HEAD上工作时,在其历史记录中git log显示我的最后一次提交b94940c63ef965ce45b0d64ccfba4359134d2552.
现在,如果我git log filename为丢失更改的有问题的文件执行操作,则不显示该提交(仅显示先前的提交).
执行git log --follow filename,我的提交b94940c63ef965ce45b0d64ccfba4359134d2552显示为最新.
果然,如果我这样做:
git checkout b94940c63ef965ce45b0d64ccfba4359134d2552
git log filename
Run Code Online (Sandbox Code Playgroud)
然后显示提交,我的更改在文件中!
换句话说,我所做的提交显示在分支历史记录中(阻止分支合并),但是单个修改过的文件在其历史记录中没有该提交!(除非我明确签出该提交).
问题:
这究竟是怎么发生的?
我如何解决它?(我们的仓库中有多个文件存在问题)
我已经使用Git大约7年了.几天前,我发现了一个让我感到惊讶的行为.我找到了git log,git blame并git bisect展示了这种奇怪的行为.朋友让我知道那个--full-history标志git log解决了我的问题.我想知道,对于我自己的教育,是否有相应的修复git blame和git bisect.
请使用此repo随意查看问题:https://dl.dropboxusercontent.com/u/1927707/problematic_repo.7z
这是它的日志:
$ git log --graph
* commit b7a8d7aa001d06eb7491ab5fb447a8dd3aa421a8
| Author: Ram Rachum <ram@rachum.com>
| Date: Tue Apr 19 17:45:01 2016 +0300
|
| adding more to some-file
|
* commit 0aa833916e908ea93902a6c4c227f9a884a1bcef
|\ Merge: 2413945 3068c7d
| | Author: Ram Rachum <ram@rachum.com>
| | Date: Tue Apr 19 17:44:31 2016 +0300
| |
| …Run Code Online (Sandbox Code Playgroud) 当我得到GIT仓库的日志时:
git log --oneline --decorate --graph
Run Code Online (Sandbox Code Playgroud)
输出是这样的:
* 44025ed (HEAD -> master) second commit
* adf2dbb first commmit
Run Code Online (Sandbox Code Playgroud)
在另一个回购中,当我git log,我得到:
* 435b61d (HEAD,master) bar
* 9773e52 foo
Run Code Online (Sandbox Code Playgroud)
(HEAD -> master)和之间有什么区别(HEAD,master)
我已经把自己处理成一种对我没有意义的情况.我会尽力描述它.
我有一个开发分支,我已经将master合并到了它git checkout develpment && git merge master.我没有在这里得到任何合并冲突.
有一个我感兴趣的具体提交,让我们说它是abcd123.当我跑步时git branch --contains abcd123,它报告两者development并master包含abcd123.当我这样做时git log,它会abcd123在提交列表中显示,包括on development和on master.
git show abcd123显示包含两个文件的更改.但我似乎无法找到这些变化.当我查看文件时,我看不到这些变化,无论是开development还是开master.当我检查时git log -- path/to/file1,我看不到abcd123,同样的git log -- path/to/file2.
这里发生了什么?如何提交,但变化显然不存在?
abcd123最初可能是在development合并到另一个分支(除了)之外引入的master.我不知道这是否会有所作为.
顺便说一句,当我尝试git checkout master && git merge development(合并后master为development如上图所示),我得到了很多的合并冲突,包括文件1和文件2的.所以这似乎表明master实际上没有合并development- git merge development …
手册页git-log(1)说:
-r
显示递归差异。
因此,我们可以用另一种方式提出这个问题:
在这种情况下,“递归差异”是什么意思。
从@phd 获得此答案后,我做了一些针对指示方向的测试:
如果我在当前版本的Git源存储库(最近从https://github.com/git/git.git克隆)中执行以下命令并签出master(当前指向commit 6a6c0f1),它们将给出相同的输出:
git log --name-only -m
git log --name-only -m -r
Run Code Online (Sandbox Code Playgroud)
(对于这个工作,人们可能不得不增加diff.renameLimit对周围3150)。我试图与Git的版本2.10.2和2.17.1获得平等的结果。
另外,命令
git log --name-only -m master~..master
Run Code Online (Sandbox Code Playgroud)
输出
commit 6a6c0f10a70a6eb101c213b09ae82a9cad252743
Author: Junio C Hamano <gitster@pobox.com>
Date: Thu May 9 00:37:54 2019 +0900
The eighth batch
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/RelNotes/2.22.0.txt
Run Code Online (Sandbox Code Playgroud)
从最后一行可以看到,即使没有,该命令也会进入子目录-r。
我最近开始zsh在iTerm2上使用(oh-my-zsh,无需自定义)。但是,我在git log或中遇到了麻烦git show。
例如,以前,git log结果只是终端的一部分,就像ls -l结果一样。戒烟后git log按q键,结果被保留在终端屏幕。我能够轻松地选择一些哈希ID。
但是,当前的问题是git log(或git show)结果替换了屏幕。因此,退出后git log,终端将完全删除所有git结果并返回到原始屏幕。这种行为就像vim。
即使使用bashMac的默认终端应用程序,此行为也相同。这不是问题--no-pager。
任何帮助将不胜感激。
我试图恢复合并,但我不知道是否使用git revert -m 1 <merge commit's sha>或git revert -m 2 <merge commit's sha>.我如何找出哪个父母是-m 1哪个父母是哪个父母-m 2?
如何打印 git commits 以仅打印正文(没有标题的提交消息)但在一行中?所以提交正文行被连接起来,可能用空格分隔,并打印为一次提交的一行。
例如,有两个提交 A 和 B,命令:
$ git log --format=%b
Run Code Online (Sandbox Code Playgroud)
印刷:
Commit A, line A.1
Commit A, line A.2
Commit B, line B.1
Commit B, line B.2
Run Code Online (Sandbox Code Playgroud)
但我想得到:
Commit A, line A.1 Commit A, line A.2
Commit B, line B.1 Commit B, line B.2
Run Code Online (Sandbox Code Playgroud) 我最近学习了很多关于 git log 的知识,并且想将其写入一个文件,以便我可以处理它并从中编写变更日志/发行说明。但是,当我在两个提交或两个标签之间写入 git 日志时,我会丢失其中的许多提交。我不知道这是为什么。我检查了 GitHub 网络图并手动检查了 GitHub 上的提交历史记录,我丢失的提交是属于该分支的提交,所以我认为我的命令错误或不完整。
这是我所做和尝试的
$ git log --pretty=oneline --no-merges --decorate=short > file1.txta384d44ff80de33aebd9057f3c99e822440fa545 Adjusted dev version (#13)
6ddf190dd11bcc71552b482b4751acc7c98a74d2 (tag: 0.0.1) 0.0.1
f7fb130f7b3f48d5fc0b2edde2bb888a891c76a6 Back to 0.1.1
881e70c8df9a3df6ec8ee8cba13b39165e9db179 Update DESCRIPTION version
d3dc1169705c5f48748bcd72d07ebd2bf5eff59f Update DESCRIPTION version
b766875b4fcaa978f6ec85129a2542ed5dd44762 Update description file version number to match version tag
ed04156444914785b002b5c94b501ed54b5b99a4 (origin/vd-networkPl )调试以修复 igraph graph_from_data_frame() 的问题
dd96aca4db22d5b9921726795642a2358248526d 编写网络图小插图
64d216700a9df8393eeab0b2c6967554da18a092 更新 codex 以使用网络图
git log --pretty=oneline --no-merges --decorate=short commit1..commit2> file2.txt …