创建版本库(在合适的位置):
$ mkdir learngit(目录名)
$ cd learngit(文件名)
显示当前目录:
$ pwd
将目录变成Git可以管理的仓库:
$ git init
将文件添加到仓库:
$ git add <file>
将文件提交到仓库:
$ git commit -m <message>
git add命令实际上就是把要提交的所有修改放到暂存区(stage),git commit可以一次性把暂存区的所有修改提交到分支。
显示仓库当前的状态:
$ git status
查看difference:
$ git diff
$ git dif #是工作区(work dict)和暂存区(stage)的比较
$ git diff --cached #是暂存区(stage)和分支(master)的比较
$ git diff HEAD #查看工作区和版本库里面最新版本的区别
e.g. $ git diff HEAD -- readme.txt #查看工作区和版本库中readme.txt文件的区别
查看提交历史:
$ git log
git中HEAD表示当前版本,上个版本就是HEAD^,上上个版本是HEAD^^...往上100个版本写成HEAD~100.
将当前版本回退到上个版本:
$ git reset --hard HEAD^
查看历史命令:
$ git reflog
指定回到某个版本:
$git reset --hard <id>(版本号)
撤销工作区的修改:
$ git checkout -- <file>
一种是<file>自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态
一种是<file>已经添加到暂存区后,又做了修改,现在,撤销修改就回到添加暂存区后的状态
总之,就是让文件回到最近一次git commit或git add时的状态
撤销暂存区的修改:
$ git reset HEAD <file>
再撤销工作区的修改就回到了乱改前的状态
在文件管理器中删除文件:
$ rm <file>
从版本库中删除文件(避免工作区和版本库不一致):
$ git rm <filr>
并且提交:$ git commit -m "remove <file>"
恢复文件,即用版本库中的版本替换工作区的版本:
$ git checkout -- <file>
将本地分支的修改推送至远程库:
$ git push origin(默认,可修改) <branch-name>
克隆仓库:
$ git clone
查看分支:
$ git branch
创建分支:
$ git branch <name>
切换分支:
$ git checkout <name>
创建+切换分支:
$ git checkout -b <name>
合并某分支到当前分支:
$ git merge <name>
删除分支:
$ git branch -d <name>
强行删除分支:
$ git branch -D <name> #未合并的分支
删除 一些 没有 git add 的 文件:
$ git clean -f
带参数的git log查看分支的合并情况:
$ git log --graph --pretty=oneline ==abbrev-commit
解决冲突:
当git无法自动合并分支时,就必须先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是吧git合并失败的文件手动编辑为我们希望的内容,再提交。
禁用Fast forward模式合并分支:
通常,git默认用Fast forward模式合并分支,但这种模式删除分支后会丢失分支信息。
禁用Fast forward模式就会在merge时生成一个新的commit,这样就可以从分支历史上看出分支信息.
$ git merge --no-ff -m 'discription' <branch-name>
“储藏”当前工作现场:
$ git stash
恢复工作:
$ git stash list #查看stash内容
$ git stash apply #恢复,恢复后stash内容不会删除
$ git stash drop #恢复的同时删除stash内容
查看远程库的信息:
$ git remote
$ git remote -v #显示更详细的信息
多人协作的工作模式:
1.首先,可以试图用git push origin <branch-name>推送自己的修改;
2.如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3.如果合并有冲突,则解决冲突,并在本地提交;
4.没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功。
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令
git branch --set -upstream-to <branch-name> origin/<branch-name>
将分岔的提交历史“整理”成一条直线:
$ git rebase #看上去更直观,缺点是本地的分叉提交已经被修改过了
创建标签:
$ git tag <tagname> #当前分支最新提交的commit
$ git tag <tagname> <commit id> #当前分支的历史提交记录
指定标签信息:
$ git tag -a <tagname> -m 'discription'
查看所有标签:
$ git tag
注意,标签是不按照时间顺序列出,而是按照字母拍排序的。
查看标签信息:
$ git show <tagname>
删除标签:
$ git tag -d <tagname>
推送某个本地标签到远程:
$ git push origin <tagname>
一次性推送全部尚未推送到远程的本地标签:
$ git push origin --tags
删除已经推送到远程的标签:
先从本地删除$ git tag -d <tagname>
再从远程删除$ git push origin :refs/tags/<tagname> #注意origin后面有空格
忽略特殊文件:
忽略某些文件时,需要编写 .gitignore
.gitignore文件本身要放到版本库里,并且可以对 .gitignore作版本管理
配置别名:
$ git config --golbal alias st status #st就表示status
$ git config --golbal alias unstage 'reset HEAD' #unstage就表示reset HEAD
--global是全局参数,在该电脑的所有git仓库下都有用
每个git仓库的配置文件都放在 .git/config文件中,别名就在 .git/config文件中的[alias]后面,可在此配置别名