命令流程图

git 清理仓库分支 git怎么清空暂存区_暂存区

常用命令

git checkout -- 文件名 # 撤销工作区改动
git reset HEAD 文件名 # 清空暂存区

命令详解

查看命令

gitk --all --windows中图形显示分支
git status --查看当前项目工作区、暂存区状态
git log --查看当前分支提交历史
git log --pretty=oneline --简洁显示,每个提交只显示一行(或git log --oneline )
git reflog --此命令可以查看全部提交历史,即使是回滚过

创建git仓库

git init [name] --初始化git项目

添加,工作区到暂存区

git add README.md -- 将工作区的新建、修改添加到暂存区并跟踪
git add -u --将全部已跟踪的文件放入暂存区(新添加的文件不会自动跟踪)
git add -A/--all -- 将所有修改都放入暂存区
git add . --将当前目录所有修改都放入暂存区
git add * -- 同上?

提交,暂存区到本地仓

git commit -m ’add my first project’ --提交暂存区到本地版本库
git commit -am ’add my first project’ --将修改的已跟踪的文件直接放入版本库,跳过暂存区(git commit -am 'add all')

克隆

git clone https://github.com/xxx [本地仓名] --从远程库克隆,所有的本地分支与远程同名分支建立追踪关系
-o --指定仓名,默认为origin

远程库操作

git remote --查看远程库信息
git remote -v --显示远程库详细推送信息
git remote add [仓名] [git路径] --添加一个远程仓别名,origin是默认习惯命名
git remote rm 仓名 --删除远程仓别名
git remote show 仓名 --查看远程仓的详细信息

分支命令

git branch --查看分支
git branch <分支名> --创建分支
-a --查看全部分支,包括远程分支
-v --查看分支,与git branch <分支名>作用相同
-r --查看远程分支
-d --删除分支,git branch -d dev
-D --强制删除分支
-b --?
--set-upstream-to <仓名/分支名> --本地分支与远程分支建立追踪关系(git branch --set-upstream-to origin/master)(git branch --set-upstream master origin/master)

拉取

git fetch <远程仓> <分支>(是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中)
而git pull 则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。

拉取合并

git pull(拉取,相当于git fetch、git merge两个命令)
git pull <远程仓名> <远程分支名>:<本地分支名> --完整的pull命令
git pull <远程仓名> <远程分支名> --如果远程分支与当前分支合并,可省略本地分支名
git pull <远程仓名> --如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。
git pull --如果当前分支只有一个追踪分支,连远程主机名都可以省略。
选项:
--allow-unrelated-histories --拉取时如果报refusing tomerge unrelated histories,就使用此选项,因为本地仓和远程仓是独立的两个tree,如果是clone的方式建立本地仓就不会出现这种情况
git pull origin master --allow-unrelated-histories

推送

git push(推送,推送分支到远程库,如果本地分支和远程分支已关联,可以省略远程库名、分支名。与git pull相同)
git push -u <远程仓名> [本地分支名] --如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push
git push --force <远程仓名> --如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用--force选项。会覆盖远程仓的更新

--set-upstream,-u --如果本地分支没和远程分支关联,需要使用--set-upstream或-u关联(git push --set-upstream origin master)
-f --本地仓首次推送远程仓,会将远程仓内容覆盖(git push -f 仓名 分支名)

撤销

git reset(撤掉本地版本库中的提交)
选项:
--hard --将工作区重置为本地库指定提交的状态
--soft --仅移动本地库指针,不更改工作区、暂存区
案例
不删除工作空间改动代码,撤销commit,并且撤销add操作:
git reset HEAD^

不删除工作空间改动代码,撤销commit,不撤销add操作:
git reset --soft HEAD^

删除工作空间改动代码,撤销commit,撤销add操作:
git reset --hard HEAD^

切换分支

git checkout --将工作区指定文件修改撤销
git checkout master --切换分支(git switch master)
-b --创建并切换分支
git checkout -b dev 相当于两条命令:(git branch dev )(git checkout dev)
git checkout -b dev master 基于master分支创建并切换分支
git checkout -b dev origin/dev 跟踪远程分支,基于远端的分支创建新的本地分支,并切换到新分支(两个分支会关联起来,可以直接执行git push命令)
git checkout --track origin/dev 上面命令的简写,git1.6.2以上版本支持。但是如果你要本地分支设置和远程分支不一样的名字的话就只能使用上面命令
-- --将file文件工作区文件恢复成暂存区一样

打标签

git tag --查看所有标签
git show --查看标签信息
git tag --打标签
git tag -a -m '第一版' --打标签,标签打在当前分支的最新提交的commit上(-a:指定标签名)
git tag -a f52c633 --给指定commit打标签,commit id是f52c633
git tag -d --删除标签
git push origin --tags --推送标签
git push origin --推送单个标签

合并分支

git merge
git merge dev --合并分支,合并指定分支到当前分支,会优先使用Fast Forward模式
--no-f --禁用FastForward模式,FastForward模式会丢掉分支信息(git merge --no-f -m 'new commit' dev)
合并分支:
第一步:切换到接受修改的分支上,例:git checkout master
第二步:执行merge命令,例:git merge hot_fixt

比较

git diff --比较工作区和暂存区的文件差异,也可以比较指定文件(git diff -- )
[分支1] [分支2] --比较指定分支的文件差异,也可以比较指定文件(git diff dev master -- )
[HEAD] --与同步前对比变更?
--cached --比较HEAD和暂存区的文件差异
–staged --查看当前更改变更

储存

git stash命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈中的内容。这也就是说,stash中的内容不仅仅可以恢复到原先开发的分支,也可以恢复到其他任意指定的分支上。git stash作用的范围包括工作区和暂存区中的内容,也就是说没有提交的内容都会保存至堆栈中。
git stash --把当前工作隐藏起来,等以后继续工作
git stash list --查看所有被隐藏的文件列表
git stash apply --恢复被隐藏的文件,但是内容不删除
git stash drop --删除文件
git stash pop --恢复文件的同时也删除文件

变基

git rebase
使git记录简洁,可将多个提交记录整合成一个
注意:合并记录时,不要将已push到远程仓库的提交记录合并