对于git 别名问题,我希望能够按名称从文件中选择单个 Python 函数。例如:
...
def notyet():
wait for it
def ok_start(x):
stuff
stuff
def dontgettrickednow():
keep going
#stuff
more stuff
def ok_stop_now():
Run Code Online (Sandbox Code Playgroud)
从算法的角度来看,以下内容已经足够接近了:
/^(\s*)def $1[^a-zA-Z0-9]/^\s*#的行^/\1\s](即,可能是缩进的注释,或者比前一个缩进长的行)(我并不关心以下函数之前的装饰器是否被选取。结果供人类阅读。)
我试图用 Awk 来做到这一点(我几乎不知道),但这比我想象的要难一些。对于初学者来说,我需要一种方法来存储原始 之前的缩进长度def。
git diff有--word-diff-regex=<...>匹配单词的选项。某些语言有特殊的默认值(如 中所述man 5 gitattributes)。但这些是什么?文档中没有描述,我查找了 的来源git,也没有找到它们。
有任何想法吗?
编辑:我在git 1.9.1,但我会接受任何版本的答案。
我的旧版本软件中有一段代码已从当前版本中删除。我想知道这部分是什么时候从代码库中删除的。目前,我这样做的方法是手动将我的集成分支与每个旧提交进行比较,但是包含代码的文件版本和我当前的版本之间有很多提交。
简而言之,如果我在旧版本中的文件的第 44-52 行上有代码,而新版本中不存在该代码,那么当它被删除时,我如何找到该提交?
我有一个庞大而复杂的 git diff。它有大约 1200 个案例,其中删除了包含字符串“fubar”的行(如果重要的话,带引号)。我想要做的是应用补丁,但不要删除这些行。
我尝试从补丁文件中删除以下表单的每一行。问题是行号是错误的,因此补丁已损坏。除了编辑行号之外,我想知道是否有解决问题的合理方法。
我删除的内容:
- (whatever here) "fubar" (whatever else here)
Run Code Online (Sandbox Code Playgroud) 是否有一个简单的 git 命令来列出差异包含给定字符串的文件,或者我是否必须迭代?
我需要与其他更改分开提交重构(方法名称更改),因此我需要确定差异包含新方法名称的文件。
我喜欢我的标签显示为 4 个空格,为此我有首选项core.pager = 'less -x4'.
我知道此时我在吹毛求疵,但即使在差异模式下,我也希望前导标签为 4 个空格,这显然是最常用的 - 但是由于前导+, -,它仅显示为 3或。由于对齐的行,这有点烦人,如果有些没有前导选项卡,与其他人相比,它们会移动 1 列。
我可以更正差异的显示,less -x1,5以获得 4 个空格的选项卡,在列 1 模 4 上对齐。但是,此选项会导致前导选项卡在非差异模式下显示为 1 列,这反过来又非常令人不安。
因此,对于两个具体示例,我如何设置 git 选项以便我使用:
less -x1,5对于差异(或真正的补丁显示)命令,例如git diff或git show HEADless -x4 对于不显示差异的命令,例如 git show HEAD~1:package.json我确信必须有一个不同的渲染器来处理基本diff和cat操作,但我无法找到这些特定的选项(尽管它们可能存在,但关于 git 主题有很多噪音)。我也不想写一大堆别名,这有点太脏了。那么这甚至可能吗?
当我对仅由单个很长的行组成的文件进行更改时,是否可以git diff仅输出该行中已更改的部分?
我知道git diff --word-diff只会以颜色突出显示已更改的部分,但它仍然会输出整行。
是否有一个选项可以只输出行中已更改的部分?或者也许是只能匹配 的彩色部分的 grep 模式git diff --word-diff?
如何列出两次提交之间“触及”的所有文件?我正在寻找一个类似于git diff COMMIT1..COMMIT2 --name-only但包括稍后修改和恢复的文件的命令。
例如,假设我有一个包含一系列提交(线性历史)的存储库:C0<-C1<-C2<-C3<-C4。提交 C1 引入了一个新文件 F,然后提交 C3 将其从存储库中删除。我正在寻找一个命令,给定 C0 和 C4,它会告诉我中间有一个文件 F。即使 C0 和 C4 中没有这样的文件。因此git diff根本不会提及文件F。
我正在用PHP编写数据库迁移脚本,我需要在phpunit中模拟git diff的结果.这个想法是git diff只返回自上次提交以来在includes /中添加或更新的文件的名称.但是,当我正在编写脚本并提交更改时,这当然会不断变化.
这是Migrate类和gitDiff方法:
#!/usr/bin/php
<?php
class Migrate {
public function gitDiff(){
return shell_exec('git diff HEAD^ HEAD --name-only includes/');
}
}
?>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
如何列出在当前本地分支和相应的远程分支之间“差异”的文件?
情况是,我早些时候就进行了远程控制,从那以后我就重新依靠master +压缩了一些提交。
在执行git status时,我得到
您的分支和“来源/您的分支”已经分开,分别具有11和2个不同的提交。
我不想执行“ git diff origin/YourBranch YourBranch”,因为所做的更改数量很大。确认在本地和远程之间更改的文件有意义之后,我将进行强制推送。