如未特别说明,所有命令均默认在Git Bash工具下执行
下载Git软件,安装 (windows系统)
git-scm.com/downloads
安装完成后,在开始菜单里找到“Git”->“Git Bash”,打开如下图
设置你的名字和邮箱,目的是:告诉git你是谁
在命令行中输入:
git config --global user.name "Your Name"
git config --global user.email "Your Email"复制代码
创建Git版本库
mkdir project //创建文件夹
cd project // 进入项目文件夹
git init //变成git管理的仓库 Reinitialized existing Git repository in E:/project/.git复制代码
到这里,你的本地仓库算是创建完毕了!
添加远程库
当你创建好本地仓库,需要在github上面添加仓库,并且让两个仓库同步
第一步:自行到 github 或者 码云 创建一个git仓库,这里简单,请自行研究,或者评论提问
第二步:可以从这个仓库克隆出新的仓库 “或者” 可以把一个已有的本地仓库与之关联(建议使用ssh连接) 会有ssh警告(看下面ssh key 配置)
//打开 “Git”->“Git Bash”
克隆仓库:
git clone 你的仓库地址
与本地仓库关联:
git remote add origin 你的仓库地址复制代码
第三步:本地库的所有内容推送到远程库上
git push -u origin master复制代码
把本地库的内容推送到远程,用git push
命令,实际上是把当前分支master
推送到远程。
由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。
ssh key 配置
连接建议使用ssh
当使用git方式下载时,如果没有配置过ssh key,则会有如下错误提示:
执行以下命令生成秘钥
ssh-keygen -t rsa -C "这里换上你的邮箱"
执行命令后需要进行3次或4次确认:确认秘钥的保存路径(如果不需要改路径则直接回车);如果上一步置顶的保存路径下已经有秘钥文件,则需要确认是否覆盖(如果之前的秘钥不再需要则直接回车覆盖,如需要则手动拷贝到其他目录后再覆盖);创建密码(如果不需要密码则直接回车);确认密码;
复制代码
执行过程如下图:
在指定的保存路径下会生成2个名为id_rsa和id_rsa.pub的文件 (上面确认的保存地址)
打开你的github,进入配置页
选择SSH and GPG keys
选择New SSH key
然后用文本工具打开之前生成的id_rsa.pub文件,把内容拷贝到key下面的输入框,并为这个key定义一个名称(通常用来区分不同主机),然后保存
再次尝试用git方式下载,可以看到已经可以正常下载
把文件添加到版本库
创建一个readme.txt
this is a readme content复制代码
第一步: 提交到仓库(添加指定readme.txt文件)git add readme.txt (添加指定readme.txt文件) git add . (添加全部文件)复制代码
第二步:命令,-m
后面输入的是本次提交的说明
git commit -m '说明'复制代码
第三步:提交到分支git push orignal 分支名复制代码
上面都是为下面的操作做准备,笔者准备在这里画重点了;
工作区和暂存区 (重要)
暂存区是Git非常重要的概念,弄明白了暂存区,就弄明白了Git的很多操作到底干了什么
工作区
你在电脑里能看到的目录
版本库
工作区有一个隐藏目录.git
,是Git的版本库
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
上面的分节(把文件添加到版本库),有两步
第一步:git add 就是把工作区的提交到暂存区
第二步:git commit 就是把暂存区提交到当前的分支
(需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改)
验证
1.修改readme.txt
2.在工作区新增一个LICENSE文本文件(内容随便写)
复制代码
两次命令git add
,把readme.txt
和LICENSE
都添加后,暂存区就有了这两个文件
git commit -m "understand how stage works"复制代码
这个时候,提交之后,暂存区就到了当前分支;
一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的(没有修改)
撤销修改
场景1,你没有git add
也没有git commit
说明:只有在工作区上面修改,没有提交到暂存区
命令:git checkout -- 文件名
测消指定文件 git checkout .
撤销所有文件
场景2,你已经git add
没有git commit
命令: git reset HEAD
返回场景1,按照场景1步骤
场景3,你已经
git commit
穿梭前,用
git log
可以查看提交历史,以便确定要回退到哪个版本。HEAD
指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
。要重返未来,用
git reflog
查看命令历史,以便确定要回到未来的哪个版本。
删除文件
情况1: 确实要从版本库中删除该文件,那就用命令git rm
删掉,并且git commit
情况2: 删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本git checkout
其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
git checkout -- test.txt 复制代码
分支管理
复制代码
创建与合并分支
创建分支
git checkout -b 分支名 //创建并切换到新分支 复制代码
checkout -b
实际执行了
git branch dev
git checkout dev复制代码
查看当前分支
git branch
复制代码
合并分支
git checkout master //切换到master
git merge dev // 合并dev复制代码
查看分支:git branch
创建分支:git branch
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d
解决冲突
Git用<<<<<<<
,=======
,>>>>>>>
标记出不同分支的内容
然后 git add --filename
git commit - m ''
用带参数的git log
也可以看到分支的合并情况
git log --graph --pretty=oneline --abbrev-commit复制代码
忽略特殊文件
不需要从头写.gitignore
文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:github.com/github/giti…
忽略文件的原则是:
- 忽略操作系统自动生成的文件,比如缩略图等;
- 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的
.class
文件; - 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
常用命令总结
git branch 查看本地所有分支
git checkout master 切换到master分支
git checkout -b debug 切换到一个新分支“debug”
git branch -d debug 删除debug分支
git branch -D debug 强制删除没有合并的分支
git push origin --delete dev 删除远程dev分支
git checkout -b dev origin/dev 创建本地dev分支并且在线上dev同步到本地dev分支
git fetch juice master 从远程juice的库获取它的master分支代码
git merge master 合并juice的分支
git checkout . 丢弃本地修改
git add -A
git commit -m '备注'
git push origin master 将本地master分支推送到远程库三步曲
git status 查看本地当前状态
git remote add juice (git地址) 和远程库建立链接
git remote -v 查看远程库信息
git stash 储藏当前未提交的代码
git stash pop 恢复储藏的代码
git stash list 查看储藏的工作现场
git clone (git地址) 从远程库克隆代码
git tag 查看所有标签
git remote set-url origin [url] 修改远程仓库地址
git branch --set-upstream dev origin/dev 建立本地dev分支与远程origin/dev分支的连接
git log -3 查看最近三条log
git reset --hard (commit) 回滚到指定版本
git push -f origin master 强制提交到远程
.gitignore规则不生效的解决办法
把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被追踪的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未被追踪状态),然后再提交:
git rm -r --cached .
git add .
git commit -m 'update .gitignore'复制代码