初始操作
git init
一个本地仓库设置完成
如果把文件夹删了 再git init的话 相当于另一个本地仓库了
设置自己的姓名和邮箱:
全局设定(设置完后本机全部生效)不局限于单个git文件夹
标识我的本机:
git config --global user.name "wkx" 本机电脑
git config --global user.name "wkx1" 服务器电脑
git config --global user.email "1217345421@qq.com" 本机邮箱
git config --global user.email "1661483886@qq.com" 服务器邮箱
本地公钥
生成公钥:ssh-keygen -t rsa -C 1217345421@qq.com
一路回车
显示公钥:cat ~/.ssh/id_rsa.pub
公钥是为了和远程仓库建立免密连接使用的
一些概念
工作区
就是你在电脑里能看到的目录,电脑上任何一个文件夹都叫工作区 ,
提交到版本库后,再次修改了的也是工作区的内容
版本库
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,
还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
基本命令解释
git config --list :查看当前在git中的所有设定,如查看用户名和邮箱
git config --global alias.st status
git config --global alias.ci commit 这两句的功能:以后输入git指令时可用ci代替commit 、st代替status;
git status :
可以让我们时刻掌握仓库当前的状态 , 比如有多少文件在工作区 , 有多少文件在暂存区 , 有多少文件已经被commit到当前分支了
git add a.txt //将a.txt从工作区提交到暂存区
我们可以git add 一个文件
也可以git add . :将工作区的所有文件添加到暂存区
git commit -m"注释"
commit 是将暂存区的内容放入到当前分支, 必须加注释 , 方便查看日志信息 , 后面回退版本和回到未来版本时需要使用 注意commit是一次性将暂存区的所有内容添加到当前分支
git diff readme.txt //diff可以知道我们在上一次做了哪些修改
小结:先使用gti status查看哪些文件被修改了 然后用git diff查看修改的内容
git log 查看版本详细信息
命令显示从最近到最远的提交日志, 如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:
git reflog 查看版本信息(不详细) ---方便版本穿梭使用
版本穿梭
- 基本指令: git reset --hard 版本号
- git的版本穿梭 , 底层其实就是移动head指针
- git reset --hard HEAD^ //回退到上一个版本
- git reset --hard HEAD^^ //回退到上两个版本
- git reset --hard HEAD~5 //向前回退五个版本
- 回退完成后,git log 当前最新版本就是回退后的版本
- 穿梭未来:git reset --hard 1094a32 // 版本号没必要写全,前几位就可以了,Git会自动去找
小结
- HEAD指向的版本就是当前最新版本
- 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
- 重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本
文件管理
管理修改
git diff HEAD -- readme.txt //可以查看工作区和版本库里面最新版本的区别:
这里的版本库特指当前分支,如果我们只将数据提交到了暂存区 , 是不加以区分的
用途 : 提交到当前分支之后 , 又对当前文件进行了修改 且未提交到暂存区
撤销修改
git checkout -- readme.txt
把readme.txt文件在工作区的修改全部撤销
文件里可能有在暂存区的内容,也有在工作区的内容 我们只可以撤销(删除)在工作区的内容
现在文件内容不在工作区了 , 已经被提交到了暂存区
git reset HEAD readme.txt //可以把暂存区的修改撤销掉 , 重新放回工作区
假如文件都不在暂存区了 已经提交到了版本库(当前分支) 那就回退版本
只要不提交到远程仓库 就有退路
总结 : 工作区的内容使用checkout直接撤销 ---- 暂存区的内容使用reset 撤销回工作区 然后撤销 --- 版本库的内容就退版本
删除文件
当我们把已经提交到版本库的文件删除了之后,
git status命令会立刻告诉你哪些文件被删除了:
第一个选择:
确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:
git rm test.txt
git commit -m "remove test.txt"
第二个选择 , 我们删错了 想要让它回来
git checkout -- test.txt //其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
** 注意:从来没有被添加到版本库就被删除的文件,是无法恢复的!**
分支管理
分支操作
git branch 分支名 //创建分支
git branch -v //查看所有分支 ,当前分支带*
git checkout 分支名 //切换分支
git merge 分支名 //把指定的分支合并到当前分支上
分支合并
正常合并--无冲突
- 主分支有文件a.txt内容为aaa
- 我们切换到副分支,将a.txt内容修改为bbb,在此期间不在主分支进行操作
- 这时我们可以回到主分支,进行合并操作:git merge 副分支
冲突合并--
- 主分支有文件a.txt ,
- 切换到副分支,然后修改a.txt的内容,提交到本地仓库,此时我们切换回主分支并且再次修改a.txt内存
- 这时我们提交到本地仓库后,想要把两个分支的修改合并起来,会出现错误
- 此时我们位于主分支,需要手动修改此文件内容,以确定一个最终版本
- 当我们确定后,再次进行add commit之后,主分支的a.txt文件内容就是我们想要的
- 注意:副分支的a.txt内容并不是合并之后的,只是合并以前自己修改的
github操作
给远程链接起一个别名
//给链接为https://github.com/wkxwkxwkx/wxystupid.git的远程仓库起一个别名wxy
git remote add wxy https://github.com/wkxwkxwkx/wxystupid.git //这样我们以后在push和pull的时候就可以使用wxy来代替远程链接
git remote -v
wxy https://github.com/wkxwkxwkx/wxystupid.git (fetch)
wxy https://github.com/wkxwkxwkx/wxystupid.git (push)
// 将本地master分支的内容推送到wxy远程仓库
git push wxy master
//拉取wxy远程库的master分支内容到本地
git pull wxy master
克隆远程仓库代码到本地
clone后会自动为远程连接创建别名为orgin
origin https://github.com/wkxwkxwkx/wxystupid.git (fetch)
origin https://github.com/wkxwkxwkx/wxystupid.git (push)
//将本地master分支push到origin远程仓库 ,因为origin为clone时自动为远程仓库创建的别名
git push origin master
idea操作git
基本操作
使用idea初始化一个git本地仓库
默认选中当前文件夹
将项目添加到暂存区
提交到本地仓库
版本切换
多次提交到本地仓库之后,我们可以查看历史日志
此时我们点击想要回退到的版本,选择Checkout Revision版本号即可(可以回退,自然也可穿梭到未来,做法都相同)
分支操作
创建一个分支
创建成功,并切换
分支合并--当在dev分支写了代码,且master分支没有操作的时候,进行普通合并操作
操作方法:回到master分支,点击当前分支,选择dev分之,然后选择Merge Selected into Current
冲突合并操作:合并前,dev分支和master分支都有操作,且都提交到了本地仓库
回到master分支,和之前操作一样
如果提示:Your local changes would be overwritten by merge. Commit, stash or revert them to proceed.
就先存储我们的修改:
然后继续进行合并:点击 Conflicts框里的 Merge按钮,进行手动合并代码。
合并成功
idea集成github
通过token添加github仓库
当将代码存储到本地仓库时,可以直接分享到github,远程仓库会自动创建
push操作:
与github链接默认为https,我们在push时可以选择自定义url,将刚才创建的仓库的ssh链接添加进来
注意:push 是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致,
push 的操作是会被拒绝的。也就是说,要想 push 成功,一定要保证本地库的版本要比远程 库的版本高!因此一个成熟的程序员在动手改本地代码之前,一定会先检查下远程库跟本地 代码的区别!如果本地的代码版本已经落后,切记要先 pull 拉取一下远程库的代码,将本地 代码更新到最新以后,然后再修改,提交,推送!
pull操作
pull 是拉取远端仓库代码到本地,如果远程库代码和本地库代码不一致,会自动
合并,如果自动合并失败,还会涉及到手动解决冲突的问题。所以我们在pull之前,尽量不要将本地代码commit到本地仓库
clone操作
版权归原作者 王凱旋 所有, 如有侵权,请联系我们删除。