Git学习总结
相关学习链接:
Git官网:https://git-scm.com/
Git和GitHub的关系?
Git是一个分布式的版本控制系统。
GitHub是一个基于Git做版本控制的代码托管平台。类似的还有BitBucket。
需要下载 Git for windows 软件,在官网下载,速度特别慢,
MINGW32 / MINGW64
提示: 可以考虑去这个网站下载,速度很快。 gitb.org
在介绍命令前,需要了解点其他的几个常用命令:
cd "<path>" 直接进入到这个路径,git中 Shift + Ins 可以复制(复制的快捷键)
cd .. 退回上一层路径
pwd 打印出当前工作路径
cd ~ 进入到用户的路径
ls 罗列出当前路径下的文件
ls -ah 罗列出当前路径下的文件,包括隐藏文件
cat <file> 显示该文件内容
比较重要的命令:有三种方式可以找到Git的帮助手册
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
例如:获取config命令的手册
git help config
常用命令:
git init 初始化git仓库。先进入到要初始化的仓库的文件夹,再执行此命令
git add <file> 添加文件到版本库。注意,可反复多次使用,添加多个文件(用空格相隔)
git commit -m "comments" 提交文件到仓库。双引号中,写提交说明,即log
git status 查看当前仓库状态,是否有修改等
git diff <file> 查看该文件difference
git log 查看提交记录,显示log,从最今到最远
git log --pretty=oneline 加上该参数,简化log,每次提交只显示一行。 前面一串是 commit id(版本号) ,SHA1计算出来
git reset --hard <commit_id> 回退到某个版本
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
git reflog 用来记录每一次命令,查看命令历史,用于确定要回到未来的哪一个版本
git diff HEAD -- <file> 命令可以查看工作区和版本库里面最新版本的区别
git checkout 其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
git checkout -- <file> 当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时
git reset HEAD <file> 当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,先用此命令,然后再用上面的命令。
rm <file> 直接把文件删除掉
git rm <file> 确实要从版本库中删除该文件,也可以删除文件夹
git rm -r <folder/> 此处-r表示递归所有子目录,如果你要删除的是空的文件夹,可以不同加-r
远程仓库:
创建SSH Key
ssh-keygen -t rsa -C "youremail@example.com"
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
为什么GitHub需要SSH Key呢?
因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。当然,GitHub允许你添加多个Key
git remote add origin <remote git repository url> 将本地仓库与远程仓库关联
添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库
git push -u origin master
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
git push origin master
把本地master分支的最新修改推送至远程仓库
git clone <remote git repository url> <自定义本地仓库的名字,这里可以省略不写>
克隆一个远程仓库
git remote 列出所有远程主机
git remote -v 查看git远程控制,可以查看远程主机的网址
git remote remove origin 删除和远程的关联
git config --get remote.origin.url 查看远程仓库地址
git config -l 查看当前git环境详细配置
git config --list 和上面的是一样的效果。
git config <key> 检查Git的某一项设置。使用上面查出来的key。
git config --system --list 查看系统配置
git config --global --list 查看当前用户global配置
git branch -a 列出所有分支的详细信息,包括远程分支,用红色标注
git branch <branchName> 新建分支
git checkout <branchName> 切换到该分支,并开始开发
git checkout -b <branchName> 新建一个分支,并同时切换到那个分支(是上面两条语句的简写)
git branch -D <branchName> 删除本地分支
之前也使用过Source Tree,它上面有一个功能,叫做git flow,点完后,可以新建一个Hotfix分支, 如 Hotfix/issueNo
这个和使用命令行创建是一样的效果: git checkout -b Hotfix/issueNo
git pull 操作就可以从远程库中获取某个分支的更新,再与本地指定的分支进行自动merge(即使本地不存在这个分支)
git pull <远程库名> <远程分支名>:<本地分支名>
如果是要与本地当前分支merge,则冒号后面的<本地分支名>可以不写
git pull <远程库名> <远程分支名>
推送本地分支到远程仓库
git push --set-upstream origin <本地分支名>
从远程仓库里拉取一条本地不存在的分支
git checkout -b <本地分支名> origin/<远程分支名>
如果出现提示:
fatal: Cannot update paths and switch to branch 'dev2' at the same time.
Did you intend to checkout 'origin/dev2' which can not be resolved as commit?
表示拉取不成功。上面的我需要先执行
git fetch
然后再执行
git checkout -b <本地分支名> origin/<远程分支名>
直接 git pull origin <远程分支名>:<本地分支名> 一个命令可以达到同等效果