Pau*_*jan 35 git history git-svn
我想从一个文件中取出一个函数并将其放入另一个文件中,但要保留责任历史记录.
cp a.php b.php
vim b.php
# delete everything but 1 function
vim a.php
# delete the 1 function
git add a.php b.php
git commit
Run Code Online (Sandbox Code Playgroud)
但如果我跑,git blame b.php我只会看到它责备这个新的提交.
vin*_*e77 23
保持责备历史的一般规则是在任何编辑之前先进行单独的移动提交.根据我的经验,这允许git blame在不需要-C选项的情况下工作.因此,在将文件拆分为新文件的情况下,可以在两个提交中完成:
在提供的示例中,这将是:
cp a.php b.php
mv a.php c.php
git add a.php b.php c.php
git commit
vim b.php # delete everything but 1 function
vim c.php # delete the 1 function
git add b.php c.php
git commit
Run Code Online (Sandbox Code Playgroud)
我稍微修改了彼得在这里对另一个问题的回答,以创建一个可重用的非交互式 shell 脚本,名为git-split.sh:
#!/bin/sh
if [[ $# -ne 2 ]] ; then
echo "Usage: git-split.sh original copy"
exit 0
fi
git mv $1 $2
git commit -n -m "Split history $1 to $2"
REV=`git rev-parse HEAD`
git reset --hard HEAD^
git mv $1 temp
git commit -n -m "Split history $1 to $2"
git merge $REV
git commit -a -n -m "Split history $1 to $2"
git mv temp $1
git commit -n -m "Split history $1 to $2"
Run Code Online (Sandbox Code Playgroud)
它只是将源文件复制到一个新文件中,并且两个文件具有相同的历史记录。可以在其他答案中看到为什么这样做的解释
也许这个以前的SO问题可以提供信息:
用来解释接受的答案:基本上,Git实际上并不"存储"移动的代码; 当生成像移动代码的责任之类的事情时,事先通过检查从提交到提交的整个存储库的状态来完成.
| 归档时间: |
|
| 查看次数: |
8571 次 |
| 最近记录: |