我的提交信息写错了

如果你的提交信息(commit message)写错了,但这次提交还没有push,可以使用以下方法来修改此次的提交信息:

1
git commit --amend --only

这会打开编辑器,在这里你可以重新编辑commit message,也可以用一条命令完成:

1
git commit --amend --only -m 'xxxxxx'

如果你已经push了这次提交,只能修改这次提交然后强推(force push),不推荐这么做。

我的提交信息中的用户名和邮箱不对

如果是单个提交,可以使用以下命令修改:

1
git commit --amend --author 'New author <newemail@test.com>' --no-edit

如果是要修改全部提交历史,可以使用:

1
git filter-branch -f --env-filter "GIT_AUTHOR_NAME='Example'; GIT_AUTHOR_EMAIL='example@test.com'"

如果需要修改特定的历史提交,可以使用脚本,增加判断,只修改特定的历史提交:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# filter-branch.sh

#!/bin/sh

git filter-branch -f --env-filter '
OLD_EMAIL="example@test.com"
CORRECT_NAME="Example-New"
CORRECT_EMAIL="example-new@test.com"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$CORRECT_NAME"
export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_AUTHOR_NAME="$CORRECT_NAME"
export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi' HEAD

我想删除我的的最后一次提交(commit)

如果你还没有推倒远程,可以使用reset到你最后一次提交前的状态(保留改变):

1
git reset --soft HEAD^

我意外的做了一次硬重置(hard reset),我想找回我的内容

如果你意外的做了一次git reset --hard,通常可以找回你的提交:

1
git reflog

你将会看到一个过去提交的列表,和重置的提交,选择你想要回到的提交的SHA,再重置一次:

1
git reset --hard SHA

我需要把暂存的内容添加到上一次的提交(commit)

1
git commit --amend

把未暂存的内容移到一个新的分支

1
git checkout -b new-branch

把未暂存的内容移到一个已存在的分支

1
2
3
git stash
git checkout new-branch
git stash pop