参考
git简介 https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
通用命令
help & vim
git [命令] --help
git status
git cat xxx
git vim xxx
git tail xxx
diff
git diff xxx
具体想要看是哪里做了修改,用此命令,比较的是工作区和暂存区的不同
git add xxx
git diff xxx
add以后,此处应该不存在不同
git diff HEAD -- xxx
比较工作区和版本库的不同 这里的HEAD指的是当前分支版本最近的一次commit
git commint -m "add a file(comment)"
只会提交暂存区中的"变化",不管工作区中的”修改“
rm & clean
git rm xxx
和git add xxx一样的效果,都是将文件的变化从工作区保存到暂存区,不过git rm 的使用一般是在,文件(rm xxx)被删除后。
换一种理解,rm xxx 删除的是工作区的文件, git rm xxx 删除的是暂存区的文件,然后再git commit -m ""
git clean -f
删除 untracked files
git clean -fd
连 untracked 的目录也一起删掉
git clean -xfd
连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
在用上述 git clean 前,墙裂建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd
git clean -nf
git clean -nfd
初次拉代码
ssh
ssh-keygen -t rsa -C "youremail@example.com"
生成秘钥
config
git config user.name
git config user.email
查看用户名和邮箱地址
git config --global user.name "username"
git config --global user.email "email"
设置用户名和邮箱地址
git config --list
查看Git所有配置
git config --global --unset user.name
删除配置中的用户名
或者:进入.git中,gedit编辑config文件,修改指定项即可
clone
git clone git@github.com:13575294417/haha.git
克隆项目到本地
remote
git remote -v
查看远程地址能否 push 和fetch
git remote add origin git@github.com:13575294417/haha.git
添加一个远程地址,名称为origin
git remote remove <name>
删除某个远程地址
回退重置相关命令
log
git log
查看初始化到"当前"时间节点的"提交"状态
git log --pretty=oneline
简化的日志信息,只显示ID,注释
git log --graph --pretty=oneline --abbrev-commit
图形化界面
git reflog
查看初始化后所有时间节点的重置、提交、切换分支、合并分支状态
reset
git reset --hard HEAD^
返回上一个版本,同时重置工作区和暂存区
git reset --hard HEAD^^
返回上上个版本,同时重置工作区和暂存区
git reset --hard HEAD~100
返回前100个版本,同时重置工作区和暂存区
git reset --hard 版本号
--hard 工作区,暂存区,版本库,保持一致,一起回退
--soft 工作区,暂存区不变化,只是回退版本库
--mixed reset的默认参数,工作区不变化 ,暂存区和版本一起回退
git reset HEAD xxx
将暂存区的xxx文件回退到最新版本,不影响工作区的修改
个人理解:一般是针对文件
git reset HEAD .
将暂存区回退到最新版本,不影响工作区的修改
个人理解:一般是针对暂存区
checkout
git checkout -- xxx
将工作区中xxx文件的状态回置为暂存区的状态,--必须不能少
个人理解:一般是针对文件
git checkout -- .
将工作区的状态回置为暂存区的状态,--必须不能少
个人理解:一般是针对暂存区
分支相关
branch & checkout
分支是指针,指向提交,而HEAD指向分支
git branch
查看分支
git branch <name>
创建分支
git checkout <name>
切换分支
git checkout -b <name>
创建+切换分支
git checkout -b dev origin/dev
新建分支dev并与远端origin存在的分支dev建立起联系,然后切换分支到dev
从远程仓库克隆下来后只有一个master分支,此时可以使用 git branch -a 查看有没有其他分支,如果有,那么可以使用 git checkout -b dev origin/dev 新建分支,并与远端建立关系
git branch -d <name>
删除分支,此命令只能删除已经合并后的分支
git branch -D <name>
删除分支,此命令可以强行删除未合并的分支
git branch --set-upstream-to=origin/dev dev
建立本地分支和远程分支的关联
merge
git merge <name>
合并某分支到当前分支
git merge --no-ff -m "merge with no-ff" dev
--no-ff参数,表示禁用Fast forward
合并要创建一个新的commit,所以加上-m参数,把commit描述写进去
此方式下,如果dev相比较master多提交一个commit,那么master上合并后会多两个commit,一个是dev多commit的那个,一个是合并时加上参数 -m 后的一个commit,
而fast forward下只有dev多出的commit,没有合并后 -m 的节点
git branch -a 查看所有的分支信息,包括clone下来后没有显示的分支
远程相关
push
git push -u origin master
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,
还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
个人理解:-u origin master 将当前分支与远程origin的master分支进行关联,下次在当前分支进行推送时,默认推送到远程origin master分支上,
两个分支的名称不一样也没关系?
git push origin feature
将本地分支feature推送到远程仓库origin上面,如果origin上没有该分支则新建,如果本地没有该分支则报错,此命令可以在任何分支上进行,但不受所处分支影响,因为推送哪个分支已经指定,如feature
git push origin master
将本地master分支推送到远程库origin对应的master分支上
git push origin master:feature
将本地master分支推送到远程库origin对应的feature分支上
【如果这个分支在远程仓库里对应不同的名称(如:feature),你应该使用这个命令】
fetch & merge
git fetch 和 git merge
组合命令的参考文档:https://blog.csdn.net/u012028371/article/details/52384882
git fetch upstream
将某个远程主机的更新,全部取回本地 参考:https://www.yiibai.com/git/git_fetch.html
git fetch upstream master
取回upstream主机的master分支 所取回的更新,在本地主机上要用”远程主机名/分支名”的形式读取
git diff dev upstream/master
比较dev分支和本地远程库upstream下master分支的区别
git merge upstream/master
合并本地远程库upstream的master分支到当前分支上
stash
git stash
git stash save "本地环境配置"
保存未commit命令
把当前工作区和暂存区的内容保存起来
git stash list
存储列表,栈的形式存储
git stash apply stash@{0}
恢复编号为stash@{0}的存储内容,只恢复工作区
git stash apply --index stash@{0}
恢复工作区的同时 也恢复暂存区
git stash drop stash@{0}
删除编号为stash@{0}的存储内容
git stash pop stash@{0}
git stash pop = git stash apply + git stash drop
git log --graph --pretty=oneline --abbrev-commit
查看图形化的分支,包括合并过程
网友评论