git 指令
git 提交过程
git 常用指令
1、git add/stage
该命令主要用于把要提交的文件的信息添加到索引库中(亦即暂存区)。当我们使用git commit时,git将依据索引库中的内容来进行文件的提交。
通常是通过git add
(git stage与git add作用相同,但是,为了消除歧义,建议使用git stage)
2、git commit
将git add添加的文件提交到版本库中
1)撤销commit
a)将提交记录回滚,代码不回滚
git reset commit-id
b)将代码和提交记录全部回滚
git reset --head commit-id
c)将部分代码文件回滚
git checkout -- files
d) git commit –amend
2)合并commit
git merge branch-name
git rebase branch-name
merge是两个分支冲突后,新增一个commit追加到branch-name,而rebase则是将分支的commit记录追加到branch-name分支上。
与svn不同的是,SVN在添加新文之后每次修改的文件直接commit就可以了;而git需先执行git add
3、git diff / git diff --staged / git diff HEAD
git diff:是查看 workspace 与 index 的差别的。
git diff --cached:是查看 index 与 local repositorty 的差别的。
git diff HEAD:是查看 workspace 和 local repository 的差别的。(HEAD 指向的是 local repository 中最新提交的版本)
当一个文件做了stage(修改index),然后又做了一些修改,则:git diff 显示当前工作区的文件和stage区文件的差异git diff --staged 显示stage区和HEAD的文件的差异
4、git remote
列出所有远程主机
git remote -v -- 同时查看远程主机网址
git remote show <主机名> -- 查看主机详细信息
git remote add <主机名> <网址> -- 添加远程主机
git remote rm <主机名> -- 删除远程主机
git remote rename <原主机名> <新主机名> -- 远程主机重命名
5、git fetch <远程主机名> <分支名>
将某个远程主机的更新,全部取回本地。例如:
a)、取回origin主机的master分支:
git fetch origin master
b)、拉取所有分支的变化
git fetch
c)、拉取所有分支的变化,并将远端不存在的分支同步移除
git fetch -p
6、git pull
用于取回远程主机某个分支的更新,再与本地的指定分支合并。
git pull = git fetch + git merge
用法:git pull <远程主机名> <远程分支名>:<本地分支名>
若远程分支是与当前分支合并,则冒号后面的部分可省略。
git pull -r 执行的是 git rebase
7、分支管理
7.1、branch 指令
git branch 列出本地分支
git branch -r 列出所有远程分支
git branch -a 列出所有本地和远程分支
git branch [branch-name] 新建分支
git branch [branch] [commit] 新建分支,并指向指定的commit
git branch --track [branch] [remote-branch] 新建分支,并与指定的远程分支建立追踪关系
git branch --set-upstream [branch] ] [remote-branch] 在本地分支和远程分支之间建立追踪关系
git branch -d [brand-name] 删除分支
git push origin --delete [brand-name]
git branch -dr [brand-name]
删除远程分支
7.2、checkout 指令
git checkout -b [branch] 新建分支,并切换到新分支
git checkout [branch] 切换分支,并更新工作区
git checkout - 切换到上一个分支
git checkout -- filename 撤销指定文件的变动
7.3、merge 指令
用于把一个分支或或某个commit的修改合并到当前分支上
git merge [branch] 合并指定分支到当前分支
7.4、cherry-pick 指令
git cherry-pick [commit] 选择一个 commit,合并进当前分支
8、标签管理
git tag 列出所有标签
git tag [tag-name] 为当前 commit 新建一个 tag
git tag [tag] [commit] 为指定的 commit 创建一个 tag
git tag -d [tag] 删除本地 tag
git push origin :refs/tags/[tag] 删除远程 tag
git show [tag] 查看 tag 信息
git push [remote] [tag] 提交指定 tag
git push [remote] --tags 提交所有 tag
git checkout -b [branch] [tag] 新建分支,并执行指定 tag
9、查看信息及改动
git status 显示有变更的文件
git log 显示当前分支的版本历史
git log --stat 显示commit历史,以及每次commit变更的文件
git log -S [keyword] 根据关键词搜索提交历史
git log [tag] HEAD --pretty=format:%s 显示每个commit之后的所有变动
git log [tag] HEAD --grep feature 显示某个 commit之后的所有变动,其提交说明必须符合搜索条件
显示某个文件的历史版本,包括文件改名
git log --follow [file]
git whatchanged [file]
git log -p [file] 显示指定文件相关的每次diff
git log -n --pretty --oneline 显示过去 n 次提交
例如:git log -p -2 显示最近两次变动及变动点
git log dev ^master 查看 dev 分支有,而 master 分支没有的
git log master..dev 查看 dev 中比 master 多提交了哪些内容
git log dev...master 查看 dev 与 master 有哪些不一样
git blame [file] 显示指定文件是什么人在什么时间修改过
git diff 显示暂存区和工作区的代码差异(此时只是修改了文件,并未 add,也为执行 commit,commit之后则不会再有该信息)
git diff -w filename 显示指定文件的变动
git diff --cached [file] 显示暂存区和上一个commit的差异
git diff HEAD 显示工作区与当前分支最新commit之间的差异
git diff [first-branch] [second-branch] 显示所有有差异的文件的详细差异
git diff [first-branch] [second-branch] --stat 显示两 个分支之间的差异
git diff [first-branch] [second-branch] filename 显示两个分支中具体文件的差异
git diff --shortstat "@{0 day ago}" 显示今天你写了多少行代码
git show [commit] 显示某次提交的元数据和内容变化
git show --name-only [commit] 显示某次提交发生变化的文件
git show [commit]:[filename] 显示某次提交时,某个文件的内容
git reflog 显示当前分支的最近几次提交
git rebase [branch] 从本地master拉取代码更新当前分支:branch 一般为master