参考资料
git的核心概念:快照
“木头龙”的回答
git 常用术语
origin:特指clone时的远程仓库
远程仓库: git clone 时使用的url,默认名字:origin 查看命令:git remote -v
> $ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)
HEAD: 当前所在的本地分支。可以将HEAD想象为当前分支的别名。
跟踪分支: 每一个分支都是从其他母分支分出来的,这个母分支就叫做跟踪分支。
git branch -vv
分支开发模式: 开发人员拥有远程仓库的push权限,通过建立特性分支并在上面开发,最后通过merge request向远程仓库提交合入请求。适用于小型软件快速开发。
fork开发模式: 开发人员没有远程仓库的push权限,通过1 fork远程仓库、2 clone fork仓库、3 添加所fork的远程仓库、4 修改fork仓库、5 在fork仓库上push,6 最后通过pull request向远程仓库提交合入请求。适用于大型软件开发。
git 常用命令总结
-
git clone
git clone URL fileName
该命令会:1 新建文件夹fileName 2 将远程仓库的内容下载至fileName 3 新建一个基于origin/master的本地master分支git clone URL ./
将远程仓库内容直接下载到当前目录 -
git fetch + git merge = git pull
-
git checkout
git checkout feature
当第一次checkout 远程分支feature时,会自动建立一个与远程分支名称相同的本地分支feature
如下命令会基于远程分支feature建立一个名为xxx的本地分支
git checkout origin/feature -b xxx
or
git checkout -b xxx origin/feature -
git log
查看最近两次日志
git log -2
查看所有分支以及远程分支
git log --all
查看图形化日志
git log --oneline --graph
查看某个文件的修改日志
git log ./code/main.c
查看含有某个字符串修改的日志
git log -S functionName
查看提交说明中包含指定字符串的日志
git log --grep=‘fix bug’
查看某个人的修改日志
git log --author=jack
git log --committer=tom -
git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin master:brantest
含义:将最新的远程仓库(origin)的分支(master)与本地分支brantest合并
git pull origin master
含义:将最新的远程仓库(origin)的分支(master)与当前的本地分支合并 -
git push <远程主机名> <本地分支名>:<远程分支名>
如果本地分支名与远程分支名相同,则可以简写:
git push <远程主机名> <本地分支名>
实例
以下命令将本地的 master 分支推送到 origin 主机的 master 分支。$ git push origin master
相等于:
$ git push origin master:master
-
git remote show origin
查看远程仓库详细信息 以及本地分支和远端分支的关系
-
git rebase
不建议使用,就算使用也要在尚未推送给别人的本地修改
常见场景操作
-
commit之后发现漏改一个文件或者commit的提交日志信息有误
当然可以再做一次commit,但是这样日志不够整洁。可以利用 --amend:
$ git commit -m ‘1st unfinished commit’
$ git add forgotten_file
$ git commit --amend (可以修改日志信息)
最终你只会有一个提交——第二次提交将代替第一次提交的结果 -
正在分支A开发特性,临时需要紧急解决主干master上的一个问题。
对于分支A的工作目录或暂存区的内容有两种方法:
1 使用git stash暂存
2 先把所有已做工作提交,解决完问题返回分支A后 使用git commit --amend完成修改
常见问题
-
git bash乱码问题:
bash执行
git config --global gui.encoding utf-8
git config --global i18n.commitencoding utf-8
git config --global i18n.logoutputencoding utf-8 -
撤销git add:
git reset HEAD -
撤销git commit:
不删除工作空间改动代码,撤销commit,不撤销git add .
git reset --soft HEAD^
删除工作空间改动代码,撤销commit,撤销git add .
git reset --hard HEAD^ -
commit提交模板
查看当前git配置
git config --global --list
git config --global commit.template “模板文件路径/模板.txt” -
如何优雅的删掉某条commit
前提:本地未push 有这样的提交路径 (旧到新)A->B->C->D
需要将B commit删掉保留A->C->D
git reset A --hard
git cherry-pick C D
或者
git rebase -i A
这个命令以A为新的基准(base),将A之后的commit列出来让用户选择如何处理。在出现的编辑界面上,把B前面的pick改成d或者drop,或者把一整行删除掉,保存退出就可以了。 -
从工作ing分支切换至其他分支
本地存在未提交的改动,需要查看其他分支代码或debug其他分支时,可以使用git stash 暂存git stash save “idea1-stach”
git stash list
git stash pop