我想获得的所有分支的日志中只有当前树。
很长的故事
鉴于下面的 git 历史:
$ git log --all --decorate --oneline --graph
* 3d0cb35 (HEAD, master) 4th commit
| * a43b07c (branch) 4th commit in branch
|/
* 722745a 3rd commit
* 46d0d84 2nd commit
* 3060fe0 1st commit
Run Code Online (Sandbox Code Playgroud)
假设我创建了一个孤儿分支。
$ git checkout --orphan orphan
Switched to a new branch 'orphan'
Run Code Online (Sandbox Code Playgroud)
在孤儿分支中添加一个提交并尝试使用第一个命令来获取“第二个”树的 git 历史记录。
$ git log --all --decorate --oneline --graph
* 202f3c4 (HEAD, orphan) Orphan branch
* 3d0cb35 (master) 4th commit
| * a43b07c (branch) 4th commit …Run Code Online (Sandbox Code Playgroud) 有没有办法让 git log 以不同的方式显示以下情况:(a) HEAD 指向分支指针,分支指针指向提交,(b) HEAD 直接指向提交,分支指针也指向同一个提交?
例如,如果我这样做
git commit -m'My commit'
git log --oneline --graph --decorate
* 655c6f1 (HEAD, master) My commit
Run Code Online (Sandbox Code Playgroud)
所以现在的情况是:655c6f1 <- master <- HEAD。但如果我这样做
git checkout 655c6f1
git log --oneline --graph --decorate
* 655c6f1 (HEAD, master) My commit
Run Code Online (Sandbox Code Playgroud)
所以现在的情况是:655c6f1 <- master,655c6f1 <- HEAD。(我处于分离的 HEAD 状态。)
但在这两种情况下,git log输出是相同的。如何让 git log 区分这两种情况?
我正在使用git log --oneline --remotes --decorate(不认为--oneline相关,因此它不在标题中)并且我收到此日志(名称和消息已更改)。
$ git log --oneline --remotes --decorate
0efdd55 (HEAD, origin/master, origin/HEAD, master) Merge pull request #1 in FOO/bar-service from develop to master
cec3034 (origin/develop, develop) Merge pull request #2 in FOO/bar-service from refactor-top-level-components to develop
a847a00 (origin/refactor-top-level-components, refactor-top-level-components) Remove an unnecessary file to fix compilation
029e107 (origin/feature/refactor-top-level-components) Add .gitignore, remove editor specific files and compiled output
72dffaf Initial bar service Commit
Run Code Online (Sandbox Code Playgroud)
我在本地feature/refactor-top-level-components创建后不小心通过BitBucket创建了分支refactor-top-level-components。我通过存储推送refactor-top-level-components和删除。feature/refactor-top-level-components为什么它仍然显示在日志中?它实际上没有被删除,还是我使用了错误的日志标志?
我想要一个 git log(或以任何其他方式)这样的输出,
2015-01-14 10:33:14 main.cpp
2014-10-30 11:30:22 some.cpp
2014-10-27 10:15:43 another.cpp
2014-10-27 09:41:22 main.cpp
2014-10-24 19:15:08 some.cpp
Run Code Online (Sandbox Code Playgroud)
基本上输出应该包含日期、时间和文件更改。如示例所示,一个条目应该在一行中。我检查了漂亮的格式,但找不到输出文件名的方法。
那么,如何从 git 命令中得到这样的东西呢?
我怎样才能得到与 aftergit log相同的结果?git fetchgit pull
我克隆了两个相同的存储库。仅clone适用于第一个,--bare第二个带有标志。一段时间后,我执行了git pull第一个存储库和git fetch第二个存储库。
如果我尝试检查git log存储库,我会得到不同的结果。
cd ~/first
git pull
git log --all --oneline | wc -l
21962
cd ~/second.git
# second
git fetch
git log FETCH_HEAD --all --oneline | wc -l
21903
Run Code Online (Sandbox Code Playgroud) 我想看看我所在的实际分支来自哪个分支。我已经查看了日志,但它太吵了,我想在这种情况下 100% 确定找到正确的分支。
我有一个网站/仓库。
我的网站的一部分说:
“由https://myotherwebsite.com/提供支持”
在某个时候,我在网站上工作的一些巨魔将其改为:
“由https://theirwebsite.com提供支持”
我如何搜索整个回购历史记录到进行此更改的提交。
多年来,已经有很多提交/分支。
所以我有这个片段,我想用它来过滤掉没有特定前缀并且在超过 3 个月内没有收到任何提交的分支,以便我稍后可以从远程删除它们。
for k in $(git branch -r | awk -Forigin !'/\/Prefix1\/|\/prefix2\//'); do
if [ "$(git log -1 --before="3 month" $k)" ]; then
echo "$(git log -1 --pretty=format:"%ci, %cr, " $k) $k";
fi;
done
Run Code Online (Sandbox Code Playgroud)
目前的问题是,当我运行这个时,我看到分支在 3 周前、5 个月前、2 个月前、1 个月前等收到提交,但我不明白为什么。
但如果我只运行: git log --before="4 Month" --pretty=format:"%ci, %cr, " 它会按预期工作。
谁能给我任何指导吗?
一些背景故事!
我一直在使用 git 为一个开源包做出贡献,我在这方面有点新手。我知道一些基本的东西。此外,我还读到如果发生合并冲突,我们可以遍历文件,标记可以帮助我们找到同一文件的两个版本中相互冲突的代码块。
最近第一次遇到合并冲突,是在 Jupyter notebook 文件(.ipynb)上。但是,合并冲突的标记使 Jupyter 无法读取笔记本。所以,我尝试了 JSON 编辑器和 VS CODE 和 Notepad++。虽然我现在可以看到该文件,但它真的很乱,因为它不仅包含 Jupyter notebook 的所有元数据,而且甚至在执行次数方面也显示冲突。另外,如果笔记本中有一个图形作为一个单元格的输出,它会被转换成很多字符,向下滚动并浏览它们是很头疼的。
在搜索 google 和 stackoverflow 并与项目所有者讨论问题后,我们决定采取另一种方法。但是,它不起作用。(我在下面进行了解释,但首先我需要提供更多信息。请耐心等待)
根据提交的历史记录,我应该是在本地通过更改 PARENT 分支上的相同文件而在本地创建此类冲突的人,因为没有人在上游更改它(在原始存储库中)
因此,请让我首先简要介绍一下分支和我对文件所做的一些更改。
branch-Asub-branch-of-Anotebook-filesub-branch-of-A成branch-A在 my 中branch-A,我做到了:git push origin branch-A但我non-fast-forward出错了。这意味着发生了分歧。对?所以,我确实git pull origin branch-A解决了它,但是我遇到了notebook-file.
替代方案
所以,我被告知我可以将文件复制到本地 git 存储库之外的某个地方,然后git checkout notebook-file在发生分歧的父节点中获取文件。对?然后,如果我这样做git pull ...应该没有问题(然后我可以包含该复制文件的更改)
但...
我再次遇到合并冲突错误。我疯了,尝试了几件事,但仍然没有。
我附上了下面的git日志。我所说的分支是Snippets_Tutorial,而它的子分支是 …
feature/XY是功能分支的名称,当前已签出。feature/XY-refactor是另一个分支的名称,它是从 分支出来的feature/XY。
当我运行时git log --oneline,我得到下面的输出。这两个在日志输出的最顶部一个接一个是什么意思?我在 Windows 上使用 git bash。
user@host ~/Documents/repo (feature/XY)
$ git log --oneline
9feb11a (HEAD -> feature/XY, origin/feature/XY) Axis labels
d250b90 (feature/XY-refactor) Refactored
87d49c1 Fix typoe
6a8a7c7 Fix print statement
945ffca Fix code layout
3e747c9 Added spaces after comma
b143713 Changed fontsize
a669cd4 Commented out a print statement
// .. more commits
Run Code Online (Sandbox Code Playgroud)