参考 https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
- 版本回退
git reset --hard HEAD^ 或者git reset --hard 版本号前几位 查看命令历史 git reflog- 撤销修改
git checkout -- readme.txt一种是
readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;一种是
readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。总之,就是让这个文件回到最近一次
git commit或git add时的状态。git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原” 把暂存区的文件重新放回工作区 git reset HEAD file- 删除
git rm test.txt - 关联远程仓库 git remote add origin git@github.com:michaelliao/learngit.git
将本地仓库推送 git push -u origin master 我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。- 推送其他分支
git push origin dev git clone git@github.com:michaelliao/gitskills.gitgit checkout -b devgit checkout命令加上-b参数表示创建并切换,相当于以下两条命令:$ git branch dev $ git checkout dev Switched to branch 'dev'- 合并指定分支到当前分支
git merge dev - 删除
dev分支git branch -d dev -
查看分支:
git branch创建分支:
git branch <name>切换分支:
git checkout <name>创建+切换分支:
git checkout -b <name>合并某分支到当前分支:
git merge <name>删除分支:
git branch -d <name> - 分支合并图 git log --graph
- 把当前工作现场“储藏”起来
git stash - 查看
git stash list - 恢复 git stash apply 恢复后,stash内容并不删 需要用
git stash drop来删除git stash pop,恢复的同时把stash内容也删了 -
你可以多次stash,恢复的时候,先用
git stash list查看,然后恢复指定的stash,用命令:git stash apply stash@{0} - 强行删除分支 git branch -D feature-vulcan
- 查看远程库的信息 git remote -v 或git remote
- 当你的小伙伴从远程库clone时,默认情况下,你的小伙伴只能看到本地的
master分支,你的小伙伴要在dev分支上开发,就必须创建远程origin的dev分支到本地,于是他用这个命令创建本地dev分支:$ git checkout -b dev origin/dev - 指定本地
dev分支与远程origin/dev分支的链接git branch --set-upstream dev origin/dev - 抓取远程的最新提交
git pull -
-
查看远程库信息,使用
git remote -v; -
本地新建的分支如果不推送到远程,对其他人就是不可见的;
-
从本地推送分支,使用
git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交; -
在本地创建和远程分支对应的分支,使用
git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致; -
建立本地分支和远程分支的关联,使用
git branch --set-upstream branch-name origin/branch-name; -
从远程抓取分支,使用
git pull,如果有冲突,要先处理冲突。
-
- 打一个新标签
git tag v1.0 默认标签是打在最新提交的commit上给提交6224937打标签 git tag v0.9 6224937 - 查看标签
git tag - 查看标签信息
git show v0.9 - 指定标签信息 git tag -a <tagname> -m "blablabla..."
- 删除
git tag -d v0.1 - 推送某个标签到远程
git push origin <tagname> 一次性推送全部尚未推送到远程的本地标签git push origin --tags -
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
git tag -d v0.9然后,从远程删除。删除命令也是push,但是格式如下:
$ git push origin :refs/tags/v0.9 -
可以用-f强制添加.ignore中的文件到Gitgit add -f App.class - 配置别名 配置Git的时候,加上
--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。$ git config --global alias.co checkout $ git config --global alias.ci commit $ git config --global alias.br branch$ git config --global alias.unstage 'reset HEAD' 把reset HEAD 设置成unstage配置文件放哪了?每个仓库的Git配置文件都放在
.git/config文件中:$ cat .git/config [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true ignorecase = true precomposeunicode = true [remote "origin"] url = git@github.com:michaelliao/learngit.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master [alias] last = log -1别名就在
[alias]后面,要删除别名,直接把对应的行删掉即可。而当前用户的Git配置文件放在用户主目录下的一个隐藏文件
.gitconfig中:$ cat .gitconfig [alias] co = checkout ci = commit br = branch st = status [user] name = Your Name email = your@email.com配置别名也可以直接修改这个文件,如果改错了,可以删掉文件重新通过命令配置。
参考 http://www.jianshu.com/p/072587b47515?utm_campaign=haruki&utm_content=note&utm_medium=reader_share
| git add . | 添加当前目录的所有文件到暂存区 |
|---|---|
| git add <dir> | 添加指定目录到暂存区,包括子目录 |
| git add <file1> | 添加指定文件到暂存区 |
| git commit -m <message> | 提交暂存区到本地仓库,message代表说明信息 |
|---|---|
| git commit <file1> -m <message> | 提交暂存区的指定文件到本地仓库 |
| git commit --amend -m <message> | 使用一次新的commit,替代上一次提交 |
| git branch | 列出所有本地分支 |
|---|---|
| git branch -r | 列出所有远程分支 |
| git branch -a | 列出所有本地分支和远程分支 |
| git branch <branch-name> | 新建一个分支,但依然停留在当前分支 |
| git checkout -b <branch-name> | 新建一个分支,并切换到该分支 |
| git branch --track <branch><remote-branch> | 新建一个分支,与指定的远程分支建立追踪关系 |
| git checkout <branch-name> | 切换到指定分支,并更新工作区 |
| git branch -d <branch-name> | 删除分支 |
| git push origin --delete <branch-name> | 删除远程分支 |
| git fetch <remote> | merge之前先拉一下远程仓库最新代码 |
|---|---|
| git merge <branch> | 合并指定分支到当前分支 |
| git reset —soft <commit> | 只改变提交点,暂存区和工作目录的内容都不改变 |
|---|---|
| git reset —mixed <commit> | 改变提交点,同时改变暂存区的内容 |
| git reset —hard <commit> | 暂存区、工作区的内容都会被修改到与提交点完全一致的状态 |
| git reset --hard HEAD | 让工作区回到上次提交时的状态 |
| git push <remote><branch> | 上传本地指定分支到远程仓库 |
|---|---|
| git push <remote> --force | 强行推送当前分支到远程仓库,即使有冲突 |
| git push <remote> --all | 推送所有分支到远程仓库 |
| git status | 显示有变更的文件 |
|---|---|
| git log | 显示当前分支的版本历史 |
| git diff | 显示暂存区和工作区的差异 |
| git diff HEAD | 显示工作区与当前分支最新commit之间的差异 |
| git cherry-pick <commit> | 选择一个commit,合并进当前分支 |