git基本命令(基于廖雪峰的git教程)

创建版本库(在合适的位置):

$ 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]后面,可在此配置别名

猜你喜欢

转载自blog.csdn.net/yanwei94/article/details/82709960