git常用命令大全

主要是工作中常用的一些git命令和一些场景的使用方式

常见命令

checkout

1
2
3
git checkout -b release-1.7.2 origin/release-1.7.2  # 从远端仓库checkout出release-1.7.2分支
git checkout -- filename # 回退某文件至修改前的状态,也可用于误删文件恢复
git checkout 0c6ded6af7068ff9fa4505d81855a38fc9861871 filename # 将某文件回退至某个版本

commit

1
git commit --amend   # 修改commit信息

stash

1
2
3
4
git stash # 保存工作现场  没有commit的内容
git stash list # 查看stash队列
git stash apply stash@{num} # 恢复对应的stash
git stash pop # 应用并删除最上面的stash

push

1
2
git push <远程主机名> <本地分支名>:<远程分支名>
git push origin yarn_hdfs:yarn_and_hdfs_tools

tag

1
2
3
4
git ls-remote --tags upstream # 查看远端的tag列表
git fetch --all --tags --prune # 获取远程所有的tag,如果有origin和upstream两个,那么都会拉下来 https://stackoverflow.com/questions/35979642/what-is-git-tag-how-to-create-tags-how-to-checkout-git-remote-tags 有时远端仓库更新了tag就需要拉一次
git tag --list # 列出所有的tag
git checkout -b tset v0.1.0 # checkout到某tag

rebase

1
2
git rebase -i commid # [当前commit,指定commitId) 左开右闭 # 修改commit信息,合并commit, 调整commit顺序,将一个类型的commit合并在一起
git rebase -i HEAD~2

cherry-pick

1
2
git cherry-pick A..B # 合并单个和多个
git cherry-pick A

reset

1
2
git reset --hard <sha1-commit-id> # 直接删除到这个commitId
git reset --soft

branch

1
2
git branch -m <old_name> <new_name> # 重命名 branch 名称
git branch -m <new_name> # 重命名 branch 名称

log

1
2
git log --graph --oneline --decorate # 查看提交历史,https://segmentfault.com/a/1190000008039809
git log --merges # merge 历史

常见操作方式

为仓库添加一个源

例如在内部flink仓库添加一个社区的源用以合并代码

1
2
git remote add upstream https://github.com/apache/flink.git
git pull upstream master # 指定上游和分支拉取代码

设置新的分支与远程分支的对应关系

1
2
git branch --set-upstream-to=origin/dev_1.3.2_minwenjun
git branch --set-upstream release-1.2.0-100 origin/release-1.2.0-100

克隆单个分支的代码

常用于review大的MR,单独拉取用户提交的一个分支

1
2
git clone [url] -b [branch-name] --single-branch
git clone https://github.com/sihuazhou/flink.git -b FLINK-9804 --single-branch

cherry-pick merge commit

1
2
3
https://stackoverflow.com/questions/9229301/git-cherry-pick-says-38c74d-is-a-merge-but-no-m-option-was-given
git cherry-pick -m 1 fd9f578
git show --pretty=raw fd48e1ab722c20c196adb3e68583ba0d046b9cad (merge commit)

将当前代码提交到另一个仓库

1
2
git remote add origin_repo_b git@server_ip:/path/repo_b.git
git push origin_repo_b branch_a(要推的那个本地分支的名字)

git修改传输协议

修改你本地的ssh remote url. 不用https协议,改用git协议

1
2
3
4
5
6
7
git remote -v
git remote set-url origin

[minwenjun@bigdata-test04 flink-metric-analyse]$ git remote set-url origin git@github.com:minwenjun/flink-metric-analyse.git
[minwenjun@bigdata-test04 flink-metric-analyse]$ git remote -v
origin git@ github.com:minwenjun/flink-metric-analyse.git (fetch)
origin git@github.com:minwenjun/flink-metric-analyse.git (push)

参考资料:

https://yuzhouwan.com/posts/30041/

谢谢支持