如何单步执行git存储库?

car*_*rji 8 git branch

我试图理解一个项目,它有助于通过使用gitk来看待它的演变.我做的是检查第一次提交,理解代码,运行测试,转到下一次提交并重复.我目前的工作流程是通过哈希检查提交

git checkout 79cd6
Run Code Online (Sandbox Code Playgroud)

但我想要的是另一个分支,我可以执行自己的更改,并允许我合并来自主分支的提交,但不需要找到提交哈希.理想的工作流程:

git checkout -b <newbranch> <first commit id of master>
git <command to move head of current branch to next commit of master>
Run Code Online (Sandbox Code Playgroud)

Fel*_*wMD 8

我知道这是一个老问题,但我想做同样的事情并找到答案,所以我想我会分享.

for commit in $(git rev-list master --reverse)
do
    git checkout $commit
    read
done
Run Code Online (Sandbox Code Playgroud)

在一个窗口中执行此操作.它将从您的初始提交开始,并在每次您输入时提前一次.然后在不同的shell中进行测试等.
它与线性历史完美配合,但我不太确定它将如何处理合并等.我相信这是合理的,但你的里程可能会有所不同.

  • 像魅力一样工作!如果您不想结帐整个历史记录,您也可以使用 `git rev-list master ^[hash of first commit to checkout]^ --reverse`。 (2认同)

sar*_*old 0

你可以写一个小 shell 脚本。一个脚本将运行git log --pretty=oneline | awk '{print $1;}'。第二个脚本(称之为它step或其他什么)将使用head, tail, wc -l。然后使用 读取文件的最后一行tail,找出文件中有多少行,并从文件中删除最后一行。丑陋,当然,但它可以完成工作。:)(如果你想不那么难看,可以truncate(1)直接砍掉文件的最后一行,而不是总是创建新的临时文件。)