今天我们来搞一下Git
这东西虽然没啥搞头儿,但是开发当中还必须得会用,谁让你我都是苦逼的开发呢~~~~
一、下载与安装
这玩意简单,给你赋个图片,自己研究一下~~~~
1.官网:https://git-scm.com/downloads
2.下载:
3.主要事项:
还有安装的路径,尽量都是英文,别整中文
4.安装完成,需要做进一步的设置
打开这个图标:
打开后的样子(版本不一样,可能有点差别,大同小异)
Git是分布式版本控制系统,所以需要填写用户名和邮箱作为一个标识。
命令:
设置用户名:git config --global user.name "你自己的用户名"
设 置 邮 箱: git config --global user.email "你自己的邮箱"
验证是否设置成功
在你的Windows系统中,C:\Users\admin下(大部分是这个路径),找到 .gitconfig 文件里可以看到跟你配置的信息一致,说明设置成功
二、实操
1.创建版本库
首先在你的任意盘符下,执行以下操作,我的习惯是在某个盘下建个文件夹来当做git的版本库(暂时就是一个文件夹,还不是版本库,这点要明确)
比如:我在 G:\JavaInstall 下建个文件夹叫gitHome
那么就在gitHome 文件夹的里面 一定是里面 ,点击鼠标右键,找到 Git Bash 打开,出现如图:
这个其实就是用git的窗口打开的这个文件,主要这个路径,用于创建版本库
- 下面开始创建版本库
命令 : git init
此时可以看到 在你的gitHome 文件夹下出现个 .git (若没有显示,则去开启隐藏文件)
所以此时,你的 .git 就是你的本地库
- 打开.git 会出现以下文件,我来做下详解
2.文件新建+状态查看+新增+提交+新增文件内容
① 查看本地版本库的各个文件的状态 : git status
例子:是用 touch 命令新建一个 a.txt文件,但此时要明确,a.txt文件还不属于git版本库,必须加入到git版本库才行
重要的一点,此时执行了git add a.txt之后,虽然应加入到了git的版本库,但是此时只是加入到了git的临时库,必要进行 commit
执行 git commit a.txt 出现以下信息
表示此时你需要键入你改变的信息,否则'#'部分将会被忽略,并且将会提交一个空文件
意思就是 你需要再写一遍 你要提交的文件,那太麻烦了,于是 q! 命令,不保存退出使用另一种方法:
命令: git commit -m "create file" a.txtOK,完成以上的步骤,才算真正的将a.txt 文件纳入git管理;
② 修改刚才的a.txt文件,会发现git的不同之处
命令:vim a.txt 增加几条数据
【注】:在git更新一个文件时,原本已经将a.txt文件纳入到管理中了,修改该文件后,还需要再纳入一遍,它不会将原有已经在版本库中的文件直接保存
命令依次:git add a.txt
git commit -m "update file" a.txt
git status
3.日志+版本号+对比不同
3.1查看日志:
① git log a.txt
② git log --pretty=oneline a.txt
这两种查看git日志的方式
第一个显示信息比较全,作者啊,时间啊,以及对文件是create 还是 update啊,都显示的清晰,但是往往格式太占用屏幕,显示不全
第二种,显示的就是具体做个啥操作,一行显示完全,不去关心谁创建的,谁修改的等信息
3.2 版本号
在执行更新操作的时候,尽量加个版本号:
如:git commit -m "update file 01" a.txt
这个 "01" 就是版本号,每次对该文件进行更新操作时,尽量给个版本,方便以后查找对比
3.3 对比不同
命令:git diff a.txt
4. 版本回退+版本穿梭+版本撤销
4.1 版本回退
命令:git reset --hard HEAD^ 【注】:HEAD是个指针,^:表示回退一步
4.2 版本穿梭
① 命令: git reflog a.txt 查看所有日志记录的指针
② 根据上一步的指针,选择要回退到哪一个位置
以上是回退一步,或者回到指定的步骤
那么当要回退到很多步呢?
使用命令:git reset --hard HEAD~4 :表示回退4步
4.3 版本撤销
命令:git checkout -- a.txt
小总结:
1.库,首先得是个git库 git init
2.得有个东西管理,新建个文件 touch a.txt
之后,向里面填东西,首次的话叫纳入git管理 git add a.txt
3.git commit -m "create file" a.txt 提交到自己的本地库
4.git log 查看git的各种日志
5.git status 查看当前版本库的状态
6. git commit 相当于往前走,那么 就有往后退 git reset --hard HEAD^ 表示往后退一步
其中,一个 ^ 表示退一步,多个 ^ 表示退多步
7.版本穿梭 用git reflog a.txt 查出他的全部指针版本号
再结合 "git reset --hard 7位版本号" 穿梭到想要的版本
8.撤销 使用 "git checkout -- 文件名"
5. 理解工作区+版本库+暂存区
5.1 工作区
工作区(Working Directory):就是你电脑本地硬盘目录
5.2 版本区
版本库(Repository):工作区有个隐藏目录.git,它就是Git的本地版本库
5.3 暂存区
暂存区(stage):一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
当在工作区时 撤销要用 "git checkout -- a.txt"
当在暂存区时 撤销要用 "git reset HEAD a.txt" 再 "git checkout -- a.txt"
当在版本区时 撤销要用 "git reset -hard HEAD^"
Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用“git add”把文件纳入Git管理,实际是把本地文件修改添加到暂存区;
第二步是用“git commit”提交更改,实际上就是把暂存区的所有内容提交到当前分支 。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以commit就是往master分支上提交更改。
可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。一旦提交完后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的。即:nothing to commit (working directory clean)。
用“git diff HEAD -- filename”命令可以查看工作区和暂存区里面最新版本的区别。
新建过撤销未add: git checkout -- 文件名
撤销已add未commit:先git reset HEAD 文件名 再 git checkout -- 文件名
撤销已add已commit: git reset –hard HEAD^
所以,一定要明确,当前所操作的文件是在git的哪一个区,才能保证执行前进和回退的正确性
5.4 删除命令
① git rm a.txt
② git commit -m "delete a.txt" a.txt
即 在git中删除要执行两步操作,虽然删了,但是还得提交一下
5.5 分支(查看+新建+切换+合并(分支名)+删除)
- 5.5.1 查看分支
- 命令:git branch
- 命令:git branch
- 5.5.2 新建分支
- 命令:git branch 分支名
- 5.5.3 切换分支
- ① 命令: git checkout 分支名
- ② 命令:git branch -b 分支名 :表示把分支和切换用一个命令完成
而且,子分支会把master(主分支)里的内容,copy出同样的一份到自己的分支里,目的就是尽量不要在主分支中去操作
- 5.5.4 合并分支
- 命令:git merge 分支名
【注】:在子线上干活,在主线上合并 - 5.5.5 删除分支
- 命令 git branch -d 分支名
【注】:要保证子线跟主线的内容一致,所以每次合并完之后,删除子线,然后再新建个子线,把内容和主线永远保持一致
5.6 版本冲突
子分支 在a.txt文件内增加数据
- 主分支 在a.txt同一个位置增加不同的数据
合并 发现存在冲突
查看冲突 ,进行人工干预,将冲突的符号删除
- 删除后的效果 (千万别把队友提交的数据删除了)
加入版本库 然后提交
这样冲突就解决了,就是手动把冲突删掉
三、GitHub 使用 与 git 协同办公
github是一个git项目托管网站,主要提供基于git的版本托管服务
github是一个基于git的代码托管平台, Git 并不像 SVN 那样有个中心服务器。目前我们使用到的 Git 命令都是在本地执行,如果你想通过 Git 分享你的代码或者与其他开发人员合作。 你就需要将数据放到一台其他开发人员能够连接的服务器上
1.GitHub的应用:
第一步 注册+检查.ssh秘钥:由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以我们需要配置验证信息(No such file or directory表示第一次)
第二步 创建SSH Key: ssh-keygen -t rsa -C 11111@126.com成功的话会在~/下生成.ssh文件夹,进去,打开id_rsa.pub,复制里面的key。
第三步 粘贴id_rsa.pub 的内容到 GitHub,注意粘贴的内容一定要恰好,不要多一个空格或者少一个空格
操作依次为:登录GitHub → 头像位置找到settings → 选择左侧菜单的 SSH and GPG keys → 左上角 New SSH key → 起个名 粘贴公钥
第四步 测试连通性: ssh -T git@github.com
表示连接成功了,此时再回到你的 .ssh 文件 ,会多了一个名字为 known_hosts文件
第五步 本地 → github远程库
现在的情景是,我在本地创建了一个OA项目后,我又想在GitHub创建一个OA项目,并且让这两个仓库进行远程同步
5.1 先在本地新建好一个git项目
5.2 到Github上新建一个同名的空项目 (是同名 我这里后来又建了一个,忘记修改,都默认oa.txt即可)
5.3 本地和github上的仓库进行关联
命令:git remote add origin https://github.com/zzyybs/oa.git
5.4 把本地库的内容推送到远程git push命令,实际上是把当前分支master推送到远程
命令:git push -u origin master
命令:git pull origin master : 是从远程库的master 下载到 本地库的 master
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
第六步 github远程库 → 本地
现在的情景是,我们从零开发,那么最好的方式是先创建远程库,然后从远程库克隆
6.1 登陆GitHub,创建一个新的仓库,名字叫OA2
6.2 远程库OK,下一步是用命令git clone克隆一个本地库
Git clone git@github.com:xxx/oa2.git
7.远程交互模型 -- 上
7.Git交互模型-下
一般工作流程如下:
1 克隆 Git 资源作为工作目录。
2 在克隆的资源上添加或修改文件。
3 如果其他人修改了,你可以更新资源。
4 在提交前查看修改。
5 提交修改。
6 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
8.Fork
现在的情景是,用叉子把别人的东西(copy no cut)叉到你碗里~
就是把别人的项目clone一份,但是owner变成自己,这样你就可以在遵守Open source license的前提下任意修改这个项目了。
相当于你在原项目的主分支上又建立了一个分支,你可以在该分支上任意修改,如果想将你的修改合并到原项目中时,可以pull
request,这样原项目的作者就可以将你修改的东西合并到原项目的主分支上去,这样你就为开源项目贡献了代码,开源项目就
会在大家共同的努力下不断壮大和完善。
9.解决Git push时重复输入用户名密码
C:\Users\admin目录下新建名字为_netrc的文件并编辑该文件写如下内容:
machine github.com
login 你的用户名
password 你的密码
比如:
machine github.com
login li4
password 123
10.Git 常用命令小总结
mkdir: XX (创建一个空目录 XX指目录名)
pwd: 显示当前目录的路径。
git init 把当前的目录变成可以管理的git仓库,生成隐藏.git文件。
touch xx文件或者新建文件
git add XX 把xx文件添加到暂存区去。
git commit –m “XX” 提交文件 –m 后面的是注释。
git status 查看仓库状态
git diff XX 查看XX文件修改了那些内容
git log 查看历史记录
git reset --hard HEAD^
cat XX 查看XX文件内容
git reflog 查看历史记录的版本号id
git checkout -- XX 把XX文件在工作区的修改全部撤销。
git rm XX 删除XX文件
git remote add origin https://github.com/zzyybs/testgit 关联一个远程库
git push –u(第一次要用-u 以后不需要) origin master 把当前master分支推送到远程库
git clone https://github.com/arjrzhouyang/testgit 从远程库中克隆
git checkout –b dev 创建dev分支 并切换到dev分支上
git branch 查看当前所有的分支
git checkout master 切换回master分支
git merge dev 在当前的分支上合并dev分支
git branch –d dev 删除dev分支
git branch name 创建分支
git remote 查看远程库的信息
git remote –v 查看远程库的详细信息
git push origin master Git会把master分支推送到远程库对应的远程分支上
常用基本操作命令25个左右