git中的各种后悔药

FAQ 常用后悔药


工作区的代码想撤销: git checkout <file name>
add到暂存区的代码想撤销: git reset HEAD [<file name>]
提交到本地仓库的代码想撤销: git reset --hard <版本号>
把刚刚的提交撤回到暂存区: git reset --soft HEAD~1
revert某修改: git revert <id>
回滚后反悔怎么办?: git reflog 记录了我们的每一次命令( commit、merge 等信息), 根据这命令来查出我们的历史 commit id,然后 git reset即可
另外,git rebase -i也可以撤销之前的提交。 edit修改,drop丢弃,squash合并压缩

修改历史提交中的用户和邮箱

修改已提交的某一次的信息, 这个使用git rebasegit commit --amend 配合一步一步完成修改。
修改git全部已提交的用户名和邮箱 , 此方案直接全部过滤修改的方式,方便快捷。

删除分支、远程跟踪分支和远程分支

https://stackoverflow.com/questions/2003505/how-do-i-delete-a-git-branch-both-locally-and-remotely?rq=1

# Deleting a remote branch,删除远程分支
git push origin --delete <branch>  # Git version 1.7.0 or newer
git push origin :<branch>          # Git versions older than 1.7.0
 
# Deleting a local branch,删除本地分支
git branch --delete <branch>
git branch -d <branch> # Shorter version
git branch -D <branch> # Force delete un-merged branches
 
# Deleting a local remote-tracking branch,删除本地的远程跟踪分支
git branch --delete --remotes <remote>/<branch>
git branch -dr <remote>/<branch> # Shorter
# only deleted his local remote-tracking branch origin/bugfix, and not the actual remote branch bugfix on origin
# 注:只会删除本地分支对应的远程跟踪分支,不会删除远程服务器上的分支

git fetch <remote> --prune # Delete multiple obsolete tracking branches
git fetch <remote> -p      # Shorter

# delete local tag
git tag -d <tagname>
# delete remote tag
git push origin :tagname #1
git push --delete origin tagname #2
git push origin :refs/tags/<tagname> #3 

建立空的新分支

这里以github的操作为例,创建一个名为gh-pages的空分支

# 创建一个独立的orphan的分支
git checkout --orphan gh-pages

# 删除原来的所有文件
git rm -rf .

注意这个时候你用git branch命令是看不见当前分支的名字的,除非你进行了一次commit。

mantisBT和git集成

mantisBT上的设置


注:我使用的是cgit提供git库的web服务。

git hook内容

repositories/dockertrain.git/hooks/post-receive 文件内容

#!/bin/sh
API_KEY=6dcde9b4c68c4507f68b6ec3
# Repository ID
ID=20
CURL=/usr/bin/curl
URL="http://localhost/mantis/plugin.php?page=Source/import&amp;api_key=${API_KEY}&amp;id=${ID}"
${CURL} ${URL}

API_KEY 在MantisBT插件配置页面Source Control Integration: Configuration获取或设置。