git log
如果 commit 消息有错别字或者「暂存区」有改动,想把改动提交到上一个 commit。
git commit --amend
git log --pretty=oneline --graph --decorate --all
git commit --amend --author="Name "
也就是把所有的改动都重新放回「工作目录」,并清空所有的 commit,这样就可以重新提交第一个 commit 了
git update-ref -d HEAD
git log A ^B
需要用到 cherry-pick 命令
# 切换到B分支
git checkout B
# 挑选A分支下的某个commit
git cherry-pick <commitId>
git reset <commit-id> #默认就是-mixed参数。
git reset --mixed HEAD^ #回退至上个版本,它将重置HEAD到另外一个commit,并且重置「暂存区」以便和HEAD相匹配,但是也到此为止。「工作目录」不会被更改。
git reset --soft HEAD~3 #回退至三个版本之前,只回退了commit的信息,「暂存区」和「工作目录」与回退之前保持一致。如果还要提交,直接commit即可
git reset --hard <commit-id> #彻底回退到指定commit-id的状态,「暂存区」和「工作目录」也会变为指定commit-id版本的内容
git tag <tagName>
默认 tag 是打在最近的一次 commit 上,如果需要指定 commit 来打 tag:
git tag -a <tagName> -m "" <commitId>
git tag
git describe --tags --abbrev=0
git tag -ln
git tag -d <tagName>
git push origin --delete tag <tagname>
一般上线之前都会打 tag,就是为了防止上线后出现问题,方便快速回退到上一版本。
下面的命令是回到某一标签下的状态:
git checkout -b <branchName> <tagName>
git checkout -b <branchName>
git branch -m <newBranchName>
git branch -d <branchName>
-r 参数相当于:remote
git branch -r
-a 参数相当于:all
git branch -a
git branch -vv
关联之后,git branch -vv 就可以展示关联的远程分支名了,同时推送到远程仓库直接:git push,不需要指定远程仓库了。
git branch -u origin/remoteBranch
或者在 push 时加上 -u 参数
git push origin/mybranch -u
git remote show origin
git remote prune origin
远程仓库删除了 dev 分支,可以通过 git remote show origin 命令查看远程分支和本地分支的对应关系:
执行命令后只是删除了本地追踪分支(origin/dev)。
git checkout -b <branch-name> origin/<branch-name>
git push origin --delete <remote-branchName>
或者
git push origin <remote-branchName>
git show <branch-name>:<file-name>
git clone -b <branch-name> --single-branch https://xxx.git
untracked 文件:新建的文件
git stash -u
git stash list
git stash apply <stash@{n}>
git stash pop
git stash clear
git checkout <stash@{n}> -- <file-path>
只有添加进「暂存区」的文件才能使用这个命令,新建文件并不行
输出「工作目录」、「暂存区」和本地最近的版本 (commit) 的 different (不同)。
git diff HEAD
git checkout <file-name>
git checkout .
git rev-list -n 1 HEAD -- <file_path> #输出新增该文件时的commit对象的hash值
git checkout <deleting_commit>^ -- <file_path> #从该commit对象取出文件
git blame <file-name>
每次更新了 HEAD 的 git 命令比如 commit、amend、cherry-pick、reset、revert 等都会被记录下来(不限分支),就像 shell 的 history 一样。 这样我们可以 reset 到任何一次更新了 HEAD 的操作之后,而不仅仅是回到当前分支下的某个 commit 之后的状态。
git reflog
git remote add <repoName> <remote-url>
git remote set-url <repoName> <URL>
git remote
git remote -v
git whatchanged --since="30 minutes ago"
输出「工作目录」和「暂存区」的 different (不同)。
git diff
还可以展示本地仓库中任意两个 commit 之间的文件变动:
git diff <commitId> <commitId>
输出「暂存区」和本地最近的版本 (commit) 的 different (不同)。
git diff --cached
展示「工作目录」中存在冲突文件的列表
git diff --name-only --diff-filter=U
文章仓库地址:https://github.com/leopord-lau/easy-git