常用Git命令说明
-
进入你的工作目录
cd yourworkpath
-
列出所有branch,当前所在branch前面有“*”号。
git branch -a
-
切换工作库
git checkout v1.5.1
-
合并另一个branch,通常是master
git merge master
-
再切换回来
git checkout master
-
查看当前目录情况
git status
-
将当前目录中的修改提交到相应的库(branch)中
git commit -m ““此处添加修改说明””
-
从远程库中合并最新状态
git pull
注:当使用git pull命令的时候如果提示有本地文件修改了,无法合并的时候,我们可以放弃本地修改(注意放弃的修改将不可恢复),然后再更新; 如果不想放弃本地修改,可以先提交,然后再合并更新。 如果要放弃本地修改后更新:
git reset –hard git pull
-
将合并后的状态并入远程库中。
git push origin master
-
如果是在分支上开发则为:
git push origin v1.5.1
-
取消某个文件的版本控制,但实际不删除这个文件:
git rm –cached somefile.txt
然后再修改目录下的.gitignore文件,添加上这个文件的相应忽略即可。
-
查看每一行的改动:
git blame
<filename>
-
git 查看一个文件的所有修改历史
git log –pretty=oneline
<filename>
-
创建一个分支并切换到这个分支工作,通常可用于临时进行一些测试性的开发,如果要保留这个dirty的分支内容,可以commit上去,随时再切换回master就象一切没发生过。
git checkout -b dirty
-
如果这个测试性的开发需要被接受合并到主干master,只要切换到master再合并即可:
git checkout master git merge dirty
-
丢弃加入缓存区(即git add的准备提交的文件)的修改,分别退回到当前版本、上一个版本、上上一个版本、前99个版本、某特定 id 版本:
git reset –hard HEAD git reset –hard HEAD^ git reset –hard HEAD^^ git reset –hand HEAD~99 git reset –hard 322542re342
-
查看过去和未来的版本 id 等信息:
git log git reflog
-
丢弃某个文件的修改,和SVN的revert命令一样
git checkout – comefile.txt
-
丢弃本地所有文件的修改,和SVN的revert命令一样
git checkout -- *.*
- 查看当前路径下的远程库情况:
git remote -v
- 添加远程库路径
git remote add origin https://github.com/wind13/xxx.git
- 查看分支详细信息
git branch -vv
- 更换本地分支对应的远程分支
git branch --set-upstream-to=origin/master master
- 显示当前设置及来源
git config --list --show-origin
- 本地删除除master以外所有分支
git branch | grep -v "master" | xargs git branch -D
- 保存当前修改,切换到 master 并删除 master 以外所有分支
git stash && git checkout master && git branch | grep -v "master" | xargs git branch -D
- 快速本地复制一个库到另一个目录,不带多余的文件:
git fast-export --all | (mkdir ../repobackup && cd ../repobackup && git init && git fast-import && git reset --hard HEAD)
-
分拆代码库
git filter-branch --prune-empty --subdirectory-filter ./folder/to/subrepo/ branch-name git filter-branch --prune-empty --subdirectory-filter ./folder/to/subrepo/ -- --all
-
如果分拆有误,想退回
git reflog
查看到具体要回到哪个点,记住HEAD{n}里面那个数字n; 然后再执行 reset 回到那个位置:
git reset --hard HEAD@{n}
-
-
- 第一次添加子目录,建立与git项目的关联
git remote add -f ai https://github.com/aoxu/ai.git git subtree add --prefix=ai ai master --squash
- 从远程仓库更新子目录
git fetch ai master git subtree pull --prefix=ai ai --squash
- 从子目录push到远程仓库
git subtree push --prefix=ai ai master
- 通过 Commits 信息查找
# 所有分支
git log --all --grep='search string'
# 包含 reflog
git log -g --grep='search string'
- 通过更改查找
git log -S 'search string'
- 通过日期范围查找
git log --after='DEC 15 2019' --until='Jan 10 2020'
常用的别名 (2020年2月28日 添加)
# 撤销上次提交
git config --global alias.undo "reset --soft HEAD^"
# 将暂存区更新修订到上次提交 (不改变提交信息)
git config --global alias.amend "commit --amend --no-edit"
# 压缩的状态输出
git config --global alias.st "status -sb"
# 用 GRAPH 为日志着色
git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'"
# 删除所有已合并的分支(测试有问题)
# git config --global alias.rmb "!git branch --merged | grep -v '*' | xargs -n 1 git branch -d"
# 贡献排行
git config --global alias.rank "shortlog -n -s --no-merges"