一、基础配置及概念
1、区域
工作区:.git 所在的本地目录
暂存区:.git/index
本地仓库:.git/objects
2、状态
未跟踪Untrack 未被git管理的文件
未修改Unmodified 已被git管理但尚未被修改的文件
已修改modified 已被git管理且已被修改但尚未添加到暂存区内的文件
已暂存Staged 已被git管理也已被修改且已添加到暂存区内的文件
3、身份说明
初次使用git时,需要对我们的身份进行说明(注:以下操作并不等于登录注册,仅作为标记说明 本地仓库属性 相当于备注标记
$git config --global user.name "XXXXXX(配置名称)"
$git config --global user.email XXXXXX@example.com(配置邮箱)
二、创建本地仓库(版本库)
本地若无仓库则直接新建文件夹 文件夹内右键选择Git Bash Here后输入
$git init //初始化一个本地仓库
三、常见的命令
1、查看仓库文件(修改)状态
$git status
2、查看文件(修改前后的)差异
$git diff
3、查看历史日志
$git log
4、文件删除
$git rm <file> //<file>处输入要删除的文件名
5、添加到暂存区
$git add <fileName> //将文件提交到暂存区
//git add . 表示将当前目录的文件都提交到暂存区
6、提交
$git commit -m <message>
将暂存区的文件提交到本地仓库的当前分支,<message>输入本次提交的描述(可以理解相当于注释)
7、版本回退
$git reset <commit-id>
// = git reset --mixed <commit-id>
$git reset --soft
$git reset --hard
$git reset --mixed
工作区 | 暂存区 | |
soft | 保留 | 保留 |
hard | 不保留 | 不保留 |
mixed | 保留 | 不保留 |
通俗的讲,使用soft模式回退版本后,版本之间工作区及暂存区修改的内容仍旧保留
使用hard模式回退版本后,相比soft的心慈手软,hard便显得心狠手辣,将两个区域的内容都删除
通常用在确定放弃当前修改时,使用hard模式回退版本并将两个版本间的两个区域修改的内容删除
而mixed模式结合两个模式,也是不加修饰在默认下执行的模式
mixed模式回退版本后,保留了版本间工作区修改的内容,仅删除了暂存区的修改内容
mixed模式与soft模式相比之下,只有是否保留版本之间暂存区修改的内容是否保存
四、远程仓库
1、配置ssh
$cd //先回到根目录
$cd .ssh //再进到.ssh的根目录
$ssh-keygen -t rsa -b 4096 //生成ssh密钥,并指定协议为RSA;指定生成大小为4096
回车提交后------>
输入密钥文件名称(若首次使用,则直接回车,默认在.ssh目录下生成密钥名称为id_rsa的密钥文件;
*若不是则请自定义新的密钥名称,以免冲突覆盖(该覆盖过程不可逆,请谨慎
再次回车提交后------>
输入密码(此密码是连接ssh的密码,图方便可直接回车为空
再次再次回车提交后------>
系统会在本地.ssh目录下生成两个密钥名称为id_rsa的文件
其中无后缀的id_rsa文件为私钥文件(谁也不要泄露!)
带后缀的id_rsa.pub文件为公钥文件,打开公钥文件将内容复制至git hub的设置中
找到SSH字眼一栏,点击添加SSH密钥进行粘贴 完成配置;
*若非通过默认操作,而自己重命名密钥文件名的,需要在.ssh目录下创建config文件
在config文件中粘贴以下内容(XXX为自己改的文件名)
注:git粘贴快捷组合键====>> Shift+insert
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/XXX
2、创建/克隆仓库
创建:git hub上新建一个远程仓库
克隆:git hub上心仪的项目的页面中,Code里选择复制URL
$git clone <url>(粘贴刚才复制的url)
提示输入密码(为创建密钥时的密钥密码,为空直接回车即可
3、将新建的远程仓库添加到本地(本地仓库关联远程仓库
$git remote add origin(仓库别名,默认为origin) <remote-url>(为git远程仓库的url)
$git branch -M main
$git push -u origin main
4、将本地分支修改推送给远程仓库 push
$git push <远程仓库名> <远程分支名>:<本地分支名>
$git push origin main
git push <远程仓库名> <远程分支名>:<本地分支名>
加粗部分可省略,表示默认==>推送仓库别名为origin的main分支
$git push //省略简化后
5、将远程仓库文件拉到本地 pull
git pull <远程仓库名> <远程分支名>:<本地分支名>
$git pull origin main //此处省略 “:<本地分支名>”,会默认为本地当前分支
$git pull //省略后默认拉取仓库别名为origin的main分支
五、分支
顾名思义从主线中分离出支线,各自在分支上完成相应的功能开发,再合并到主干中,提升多人协同的开发效率
$git branch //查看分支
$git branch <name> //创建分支 <name>为分支名
$git checkout <name> //切换分支
$git checkout -b <name> //创建+切换分支 = git branch <name> + git checkout <name>
六、合并分支
$git merge <name> //合并指定分支到当前分支
$git branch -d <name> //删除分支
七、解决(合并)冲突
什么是冲突?==> 两个分支中修改的内容有重合的部分
在使用上述git merge 命令后,有冲突但依旧会合并,但会显示冲突内容, 然后需要手动进行修复
修复后再次提交
$git add .
$git commit -m "merge conflict"
*若提交之前想中止此次合并操作
$git merge --abort
八、储藏代码
因为在内容有修改后无法切换到其他分支,修改的内容需要提交或临时储存后才能切换其他分支
$git stash 储藏修改的代码
// =git stash push
$git stash apply @stash{0} 恢复之前修改的代码