有没有办法压缩一些非提交的提交

我试图压扁一系列的提交 - 头到头〜3。 有没有快速的方法来做到这一点,或者我需要使用rebase - interactive?


确保你的工作树是干净的,然后

git reset --soft HEAD~3
git commit -m'new commit message'

我个人喜欢wilhelmtell的解决方案:

git reset --soft HEAD~3
git commit -m 'new commit message'

不过,我用一些错误检查做了一个别名,以便你可以这样做:

git squash 3 'my commit message'

我建议设置实际运行脚本的别名,以便更容易(a)编写脚本并(b)通过错误检查执行更复杂的工作。 下面是一个脚本,它执行的是squash的工作,然后是一个脚本来设置你的git别名。

压扁脚本(squash.sh)

#!/bin/bash
#

#get number of commits to squash
squashCount=$1

#get the commit message
shift
commitMsg=$@

#regular expression to verify that squash number is an integer
regex='^[0-9]+$'

echo "---------------------------------"
echo "Will squash $squashCount commits"
echo "Commit message will be '$commitMsg'"

echo "...validating input"
if ! [[ $squashCount =~ $regex ]]
then
    echo "Squash count must be an integer."
elif [ -z "$commitMsg" ]
then
    echo "Invalid commit message.  Make sure string is not empty"
else
    echo "...input looks good"
    echo "...proceeding to squash"
    git reset --soft HEAD~$squashCount
    git commit -m "$commitMsg"
    echo "...done"
fi

echo
exit 0

然后,将该squash.sh脚本连接到git别名,创建另一个用于设置git别名的脚本( create_aliases.commandcreate_aliases.sh ):

#!/bin/sh
echo '-----------------------'
echo 'adding git aliases....'
echo '-----------------------'
echo
git config --global alias.squash "!bash -c 'bash <path to scripts directory>/squash.sh $1 $2' -"
#add your other git aliases setup here
#and here
#etc.
echo '------------------------------------'
echo 'here is your global gitconfig file:'
echo '------------------------------------'
more ~/.gitconfig
echo 
echo
echo '----------------'
echo 'end of script...'
echo '----------------'

我用了:

EDITOR="sed -i '2,/^$/s/^pickb/s/'" git rebase -i <ref>

工作很好。 只是不要尝试提交以“pick”开头的行的提交日志:)

链接地址: http://www.djcxy.com/p/4747.html

上一篇: Is there a way to squash a number of commits non

下一篇: JavaScript: when I pass array from iframe function the array lose his type!