查看 commit 历史
显示本地执行过的 git 命令
就像 shell 的 history 一样
撤销某个 commit/reflog,并重新添加一个 commit/reflog
1
| git revert <commit-id>/<reflog-id>
|
只会撤销指定 commit 的改变,不影响后面的 commit。
如果 commit 来自另一个分支,因为添加了新的 commit,再次 merge 时,文件不会合并。
回滚到某个 commit/reflog,并删除后面的 commit/reflog
和revert的区别:reset命令会抹去某个commit id之后的所有commit
1 2 3
| git log // 查询要回滚的 commit_id git reset --hard <commit-id>/<reflog-id> git push origin HEAD --force // 强制推送到远端
|
git reset 参数默认是 –mixed,会回滚 commit 和 add,保留文件。平时使用默认就可以了。线上运维使用 –hard 回滚代码。
1 2 3
| git reset <commit-id>/<reflog-id> git reset HEAD^ git reset --mixed HEAD~1
|
git reset commit-id 和 reflog-id 的区别:
通常我们都是在新分支上开发,然后合并(merge)到发布分支,因此在发布分支,只要使用
就可以回滚 merge 操作,即开发分支上所有的 commit。非常适合线上回滚代码。
这里给一个快速回滚到上一条 reflog 的代码:
1
| git reflog |awk 'NR==2{print $1}'|xargs git reset --hard
|
切换分支
1
| git checkout <branch-name>
|
放弃文件修改也可以用这个命令,但如果文件名和分支名相同的话就会搞混。所以放弃文件修改统一加上 –
放弃文件修改
1 2
| git checkout -- <file-name> git checkout <stash@n> -- <file-name>
|
查看 commit/reflog 之间的文件区别
1 2 3 4
| $ git diff $ git diff -- <file-name> $ git diff <commit-id>/<reflog-id> <commit-id>/reflog-id> $ git diff <commit-id>/<reflog-id> -- <file-name>
|
在当前分支基础上新建分支
1
| $ git checkout -b <branch-name>
|
分支改名
1
| $ git branch -m old_branch new_branch
|
拉取远程分支
1
| $ git checkout -b <本地分支名> origin/<远程分支名>
|
删除分支
1 2 3 4
| $ git branch -d <branch-name>
$ git push origin --delete <branch-name>
|
合并分支
1
| $ git merge <branch-name>
|
只下载最新代码
1
| $ git clone --depth=1 <url>
|
只下载最新代码而不带历史数据,加速下载
fork 后和原仓库同步
1 2 3
| $ git remote add upstream URL $ git fetch upstream $ git merge upstream/master
|
重命名
1
| $ git branch -m oldName name
|
参考资料:
http://www.bootcss.com/p/git-guide/
https://github.com/521xueweihan/git-tips#回到远程仓库的状态