我想从旧提交中记录的文件中恢复几行.我可以通过跑步看到那些线条
git log -p
Run Code Online (Sandbox Code Playgroud)
作为最后的手段,我准备简单地从该日志的输出中复制那些行,但这会伤害我的纯粹主义者的心脏,而且看起来相当不专业.
我不希望简单地运行git checkout <file>,因为这将放弃对了本地修改<file>,因为提交的问题.相反,我想<file>仅使用纯Git命令将来自该提交的更改合并到工作树中.
我怎样才能做到这一点?
对于Linux下包含少量字节的文件,我只需要处理自上次处理以来它被更改的时间.我通过clearstatcache(); filemtime();定期调用PHP来检查文件是否已更改.由于整个文件总是很小,因此删除对filemtime的调用并通过将内容与过去的内容进行比较来检查文件更改是否会提高性能?或者就性能而言,最好的方法是什么.
我试图理解C如何在堆栈上分配内存.我一直认为堆栈上的变量可以描述为结构成员变量,它们占用堆栈中连续的,连续的字节块.为了帮助说明我在某个地方发现的这个问题,我创建了这个小程序来重现这个现象.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void function(int *i) {
int *_prev_int = (int *) ((long unsigned int) i - sizeof(int)) ;
printf("%d\n", *_prev_int );
}
void main(void)
{
int x = 152;
int y = 234;
function(&y);
}
Run Code Online (Sandbox Code Playgroud)
看看我在做什么?假设sizeof(int)是4:我在传递的指针后面看了4个字节,因为它会int y在调用者堆栈中的位置之前读取4个字节.
它没有打印152.奇怪的是当我看下4个字节时:
int *_prev_int = (int *) ((long unsigned int) i + sizeof(int)) ;
Run Code Online (Sandbox Code Playgroud)
现在它可以工作,打印x调用者堆栈内的任何内容.为什么x地址低于y?堆栈变量是否颠倒存储?
考虑以下行:
int mask = 1 << shift_amount;
我们知道这mask是 4 个字节,因为它是明确声明的int,但是1要移动的这个长度未知。如果编译器选择 type 为char8 位,或者它的unsigned short大小可能为16 位,那么移位结果实际上将取决于编译器关于如何处理它的决定的大小1。编译器在这里如何决定?以这种方式保留代码是否安全,或者应该改为:
int flag = 1;
int mask = flag << shift_amount;
c ×2
bit-shift ×1
c++ ×1
filemtime ×1
git ×1
git-checkout ×1
performance ×1
php ×1
pointers ×1
stack ×1