我准备在现有项目中移动大量文件.在我这样做之前,我想牢牢掌握一些用于分析具有多文件历史记录的代码的技术.
我怎么能用git问:"这行代码来自哪里?" 当内容在其生命周期中移动了多个文件?
我知道git没有明确地跟踪重命名(有充分的理由)所以看起来我应该能够问这个,我只是不确定如何.如果有方法可视化这个也很好知道.
我将beta分支合并到主分支中.我推到原点.我现在希望master在本地和远程合并之前就像它一样.
撤消已经推送的合并的一个很好的答案表明
git revert -m 1 commit_hash
Run Code Online (Sandbox Code Playgroud)
如果这确实是要走的路,我该如何确定commit_hash?我没有成功尝试merge-base返回的哈希:
$ git merge-base --all master beta
1f4b949b7ef97abf913ae672e3acd0907abfac1b
$ git revert -m 1 1f4b949b7ef97abf913ae672e3acd0907abfac1b
error: Mainline was specified but commit 1f4b949b7ef97abf913ae672e3acd0907abfac1b is not a merge.
fatal: revert failed
Run Code Online (Sandbox Code Playgroud)
我已经检查了分支的git-log和gitk再现,但是它们很长,我不太清楚我的解释,觉得我应该寻求帮助才能做出更大的混乱.Beta来自v2,它来自master.随着我与主人保持最新的分支机构,我们已经有一些从大师到v2和beta的合并.从beta到Master的方向的合并是我想纠正的错误.
一旦我确定了合并点,如果我发现在合并之后对master进行的任何提交真的应该在beta分支上,那么移动它们的最佳方法是什么?
我正在寻找一种方法来查看活动分支上的所有提交,因为分支点(包括它)和希望从master分支.
例如情况如:
A-B-C-D (master)
\
E-F (branch A)
Run Code Online (Sandbox Code Playgroud)
我希望得到提交F,E和B,而F是HEAD.
并为
A-B-C-D (master)
\
E-F (branch B)
\
G (branch C)
Run Code Online (Sandbox Code Playgroud)
如果G是当前HEAD,我想要提交G,F,E,B.使用--graph选项显示此信息也很棒.
现在我想出来了
git log master^..HEAD
Run Code Online (Sandbox Code Playgroud)
但它似乎显示太多信息(如来自其他分支机构的提交).谢谢你的帮助!
在Gitk中,我可以看到团队成员的提交(X)有两个父母,第一个父母是他自己的先前提交(A),另一个父母包含许多其他人提交(1到5).合并后,其他人(1到5和其他人)所做的所有更改都不再出现在X,B,C等...
A------------
\
X - B - C
/
1--2--3--4--5
/
e--r--j--k
/
l--m
Run Code Online (Sandbox Code Playgroud)
如果我提交X提交A它没有显示差异,如果我将X提交X提交5它显示所有缺少的更改.此外,在提交X,B或C时,git日志不会显示对提交1到5中的文件所做的更改.但是,如果我执行git log --full-history,则历史记录会显示在1中进行的更改到5,但这些更改仍未出现在实际文件中,并且历史记录未显示它们正在撤消.所以git log --full-history似乎与当前文件内容相矛盾.
我与提交X的用户进行了交谈.他说他没有进行重置或拒绝,他说他在相关时间内没有恢复任何提交.然而,他说他确实有时会做一个拉原点大师,导致其他人的变化被放入他的索引或工作树中,好像他已经做出了这些改变而不是这些改变的实际作者.他说,当这种情况发生时,他会做一个新的克隆,并且不会将任何东西从当地的回购推送给主人,因为他认为Git做错了什么.
这两件事是否相关(坏拉和坏合并)?
我怎样才能确切地说出发生了什么,以便我们将来可以避免这种情况?
是什么原因导致Git有时会将从原始主数据中提取的更改放在本地工作目录或索引中,就像它们是本地更改一样?
我试图显示master在过去24小时内添加到分支的提交(不包括合并提交).目前我正在使用此命令:
git log --format=format:%s --no-merges --since='24 hours ago'
Run Code Online (Sandbox Code Playgroud)
但是这有一个问题:如果提交超过24小时,但master在过去24小时内合并到分支中,则该命令不会列出提交.是否可以显示master过去24小时内添加到分支的提交,而不是过去24小时内创建的提交?
请注意我在干净的CI工作区中执行此操作,因此git reflog无法帮助我.
提前致谢!
我最近开始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。
任何帮助将不胜感激。
请考虑以下提交历史记录:
1---R---3---5---P-> # patch-v1.1
\ \
2---4---+---8---+---10---R-> # release-v2.0
\ /
6---7---9 # feature-foo
--> time
# 1 - 10 are commits
# P is a patch release commit
# R are major release commits
# + marks a merge commit
Run Code Online (Sandbox Code Playgroud)
我想生成更改日志release-v2.0,但由于P (patch-v1.1)已经发布,它的更改不应该是v2.0更改日志的一部分.我可以将git log命令配置为仅列出提交2, 4, 6 .. 11(即,来自release-v2.0和的提交feature-foo)吗?
我需要使用该git-log命令在两个日期之间平均创建一个提交添加和删除行数的报告.
目前我使用的命令是:
git log --since="2015-12-01" --until="2015-12-31" --shortstat
Run Code Online (Sandbox Code Playgroud)
但我需要在过程中过滤一些文件.Thoses文件是自动生成的,我们不希望看到它们的影响.他们很容易通过他们的名字来识别*.generated.*
我选择使用该git-log命令,我能够获得我需要的报告,除了我没有看到如何过滤这些不需要的文件.
文档很大,我已经多次阅读了,但我没有看到任何基于名称过滤文件的内容.这是可能的,还是我必须找到另一个命令来查找提交添加/删除的行数?
给出以下示例git commit消息:
My commit message summary
Some more body in this message...
Signed-off-by: My name <my.name@example.com>
Issue: MYPROJ-123
Run Code Online (Sandbox Code Playgroud)
我现在可以使用最近的Git版本(2.14+)解析这些" 预告片 "(页脚中的键/值参数)git interpret-trailers --parse.这似乎也集成到git-log格式选项中,例如:
git log --format="%h %s %(trailers)"
Run Code Online (Sandbox Code Playgroud)
但是,它显示了所有预告片,包括换行符.
是否可以将其限制为单个拖车令牌的值?理想情况下,我想要完成的是git-log行,只显示Issue令牌的值:
0123abcd My commit message summary MYPROJ-123
Run Code Online (Sandbox Code Playgroud) 如何打印 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 ×10
git-log ×10
git-commit ×2
git-merge ×2
git-branch ×1
git-pull ×1
git-revert ×1
oh-my-zsh ×1
renaming ×1
terminal ×1
undo ×1