标签: git-log

使用git log --decorate显示限制引用

我目前使用的主存储库有3个标准遥控器:本地备份,我的开发合作伙伴工作站和托管存储库.我们有3个或4个分支,大部分时间都处于活动状态,一个是主分支.

我使用以下方法定期监控分支机构:

git log --graph --oneline --decorate -15 my-branch his-repo/his-branch master other-branch
Run Code Online (Sandbox Code Playgroud)

--decorate是至关重要的,因为它让我了解与我们非常不稳定的发展分支有关的事情.问题是我在装饰中看到了所有远程引用和所有分支,标签等.

有没有办法限制--decorate只输出某些参考?在命令行列出refs仅限制显示的提交,而不是显示的refs.

谢谢,迈克

git git-log

9
推荐指数
1
解决办法
1708
查看次数

在git log中使用路径通配符

我的git树中有一个文件:

$ git ls-files | grep /Expression.java
sm/src/main/java/cl/utilities/sm/Expression.java
Run Code Online (Sandbox Code Playgroud)

我想得到它的活动日志,而不必输入整个路径.基本上我想要这个输出:

$ git log --oneline -2 sm/src/main/java/cl/utilities/sm/Expression.java
2718cdc cleaned up some warnings
f30cf15 Added missing @Overrides
Run Code Online (Sandbox Code Playgroud)

......但无需打字sm/src/main/java/cl/utilities/sm.我尝试了很多东西,但没有一个有效:

$ git log -- \*/Expression.java
$ git log -- \*Expression.java
$ git log -- \*\*/Expression.java
$ git log -- '*/Expression.java'
$ git log -- '**/Expression.java'
Run Code Online (Sandbox Code Playgroud)

git wildcard git-log

9
推荐指数
1
解决办法
2644
查看次数

查找包含多个特定提交的Git提交

一般问题:给定一组提交,我如何找到所有提交的提交列表作为祖先,或相关地,包含所有这些提交的第一个提交.

我可以通过查找git branch --contains <commit>集合中所有提交返回的分支来查找包含提交的分支(类似标记),但是git rev-list没有--contains选项.实际上,我正在寻找一种方法来组合常规--contains参数git rev-list,并将输出限制为包含所有列出的提交的提交,而不是其中任何一个(这是如何--contains正常工作).

具体的例子:鉴于提交a,b,c,我怎么能找到的第一个承诺是在其祖先的所有三个提交?

例如,给定下面的树,我如何找到标记为X的提交?

* (master)
|
X
|\
a *
| |
b c
|/
*
|
*
Run Code Online (Sandbox Code Playgroud)

我假设我可以做一些魔法git rev-list,并且可能涉及到<commit1>...<commit2>符号,但我不能比这更进一步.

git git-log git-branch git-rev-list

9
推荐指数
1
解决办法
657
查看次数

git log --graph输出中出现意外的下划线

git log --graph在我的Linux内核副本上运行时,我看到图中的下划线看起来不应该存在.

这个下划线是什么意思?

我正在使用的具体命令是:

git log --graph --decorate --pretty=oneline --abbrev-commit --all --date-order
Run Code Online (Sandbox Code Playgroud)

输出看起来像这样:

git log --graph输出

我已经尝试在gitk中查看图中的这个区域,但似乎没有任何与众不同的东西.

我不认为这只是显示一个分支点,因为我希望它在右边呈现,而不是在左边(左边应该匹配上面的图像):

I see:        I'd expect for
              normal branching:

 \ \ \         \ \ \
 / / /         / / /
| _ /         | / /
|  /          |/ /
| |           | |
| |           | |
Run Code Online (Sandbox Code Playgroud)

git git-log

9
推荐指数
1
解决办法
1187
查看次数

截断提交消息

我知道可以用漂亮的方式截断git commit消息,如下所示:

git log --oneline --format="%h %<(70,trunc)%s %cn"
Run Code Online (Sandbox Code Playgroud)

但这似乎填充了带有空格的短于70个字符的提交消息(因此%cn将始终向右推).

有没有办法停止提交消息填充空格,如果它短于70个字符?

git pretty-print git-log

9
推荐指数
1
解决办法
1470
查看次数

为什么不是pathpec magic :(排除)从git log的输出中排除指定的文件?

这是在git log -p中忽略文件的后续内容,也与使'git log'忽略某些路径的更改有关.

我正在使用Git 1.9.2.我正在尝试使用pathspec魔术:(exclude)来指定某些补丁不应该在输出中显示git log -p.但是,我要排除的修补程序仍显示在输出中.

这是一个重现这种情况的最小工作示例:

$ cd ~/Desktop
$ mkdir test_exclude
$ cd test_exclude
$ git init
$ mkdir testdir
$ printf "my first cpp file\n" > testdir/test1.cpp
$ printf "my first xml file\n" > testdir/test2.xml
$ git add testdir/
$ git commit -m "added two test files"
Run Code Online (Sandbox Code Playgroud)

现在我想显示我的历史记录中的所有补丁,期望与文件testdir夹中的XML文件相对应的补丁.因此,按照VonC的回答,我跑了

$ git log --patch -- . ":(exclude)testdir/*.xml"
Run Code Online (Sandbox Code Playgroud)

但我的testdir/test2.xml文件的补丁仍显示在输出中:

commit 37767da1ad4ad5a5c902dfa0c9b95351e8a3b0d9
Author: xxxxxxxxxxxxxxxxxxxxxxxxx
Date: …
Run Code Online (Sandbox Code Playgroud)

git git-log

9
推荐指数
1
解决办法
2219
查看次数

找出我们尝试挑选的提​​交的依赖项

假设如下:

                            HEAD/master     
                             |
A<--B<--C<--D<--E<--F<--G<--J  
        ^
        official 
Run Code Online (Sandbox Code Playgroud)

哪里official有分店。
我想挑选 2 个提交到official分支,例如EJ
这两个提交都是影响相同 3 个文件的修复。
当我这样做时git cherry-pick E一切顺利,但当我这样做时,git cherry-pick J我遇到了一些冲突。
查看差异,我意识到我还需要挑选提交 F,它在这 3 个文件中的两个文件中进行了更改,这些更改基本上是方法定义更改,并且J是在此基础上完成的。
因此,只需执行git cherry-pick F && git cherry-pick J
问题即可轻松解决:
如果我不知道在这些文件中所做的更改并且提交 F 是更改许多文件的大提交:是否有另一种方法可以确定我们尝试选择的提交取决于哪个提交而无需手动执行 git 日志在文件上并通过提交提交?

git git-diff git-log git-branch git-cherry-pick

8
推荐指数
2
解决办法
1648
查看次数

Git日志的-r选项有什么作用?

手册页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

git git-log

8
推荐指数
1
解决办法
77
查看次数

如何以自定义 git 日志格式显示标签?

情况

我正在使用 git log 和自定义--pretty:format

 git --no-pager log --pretty=format:"%C(yellow)%h%Creset %s %Cgreen(%cr) %Cblue<%an>%Creset" -5
Run Code Online (Sandbox Code Playgroud)

产生这样的输出

7224466 update version (4 days ago) <Xerus>
3f00703 improve stuff (9 days ago) <Xerus>
Run Code Online (Sandbox Code Playgroud)

问题

我还想查看提交的标签(如果它有任何与之关联的标签),例如 option --decorate,但我在格式文档中找不到任何关于标签的提及。

git git-log

8
推荐指数
1
解决办法
4351
查看次数

有没有办法可以恢复 Gitlab 上已删除的存储库?

我从网站上删除了 Gitlab 中的一个存储库,并且我正在尝试检索它,这可能吗?

git git-log gitlab gitlab-ci gitlab-api

8
推荐指数
1
解决办法
9781
查看次数