Git 的基本使用——笔记
Git 的基本使用
Git 和代码托管中心
代码托管中心的任务:维护远程库
局域网环境下:
- GitLab 服务器
外网环境下:
GitHub
码云(Gitee)
基本使用
初始化本地仓库
填写用户名和邮箱作为一个标识:
git config --global user.name"用户名"
git config --global user.email"邮箱地址"
本次仓初始化
通过 git init
进行初始化,会生成一个 .git
文件夹,默认是隐藏的,不要随意修改删除。表示这是一个本次的 git 仓库。
查看用户信息:
git config -l
Git 的存储
添加文件
git add 文件名
将文件添加到暂存区,表示把已修改的文件放到下次提交时要保存的清单中。
此时所 add 的文件才能被 Git 所管理,并不是将文件放入到本地仓库就可以了。
同时如果需要 add 的文件得先放入 Git 仓库中,才能被 add,如果在仓库外是不能 add 的。
提交到仓库中
git commit -m"注释"
将文件从暂存区放入到本地仓库中,文件为已提交状态,表示文件已经保存在了本地数据库中,生成了一个新的版本。
逻辑上都是在本地计算机完成。
查看仓库状态
git status
查看当前目录中文件的所有状态。
当每一次 commit 后,版本相当于新增,暂存区已经被清空了,此时仓库为最新状态,这个时候修改之前提交的文件,此时并不会自动的提交和更新状态,而需要重新 add 将文件放到暂存区,再 commit 提交到仓库,才能将修改后的文件提交到仓库。
查看文件修改对比差异
git diff
比较文件差异
git diff 文件名
将工作区中的文件和暂存区进行比较
查看日志
git log
查看历史记录,显示从最近到最远的日志信息。
简化日志显示
git log --pretty=oneline
查看简短日志
git reflog
这两者的区别在于 reflog 是将 commit 的标识取前缀,缩短了,并且:
HEAD@{移动到当前版本需要多少步}
文件回退,前进后退版本
git reset --hard [局部版本号]
既可以前进也可以后退,根据日志信息来。
回退
此时的版本是 563eb1e 这个。
前进
可以看到即使使用 git reset --hard
命令进行了版本回滚,但是回滚的操作依然会被 git reflog
记录下来,但是 git log
以及 git log --pretty=oneline
命令中,都只记录了当前(也就是回滚后的)版本及之前的版本:
eg:
- 481e12e
- 12ds123
- 123d123
- we2e1w
如果从 0 回滚到 2,git reflog
会将所有的回滚操作以及之前的 commit 操作都记录下来,而另外两个命令则只有 2-3 的日志记录而没有 0-1 的。所以 git reflog
命令经常使用。
文件的删除和恢复
-
如果本地文件和git 仓库文件都删除了
git reset --hard
命令通过回滚版本将仓库回到删除前的一个状态。 -
如果只是删除了本地文件,git 仓库还没提交
git checkout -- 文件名
放弃对指定文件的修改(如果已经在缓存区则不行),只能对工作区的文件进行进行放弃修改git checkout .
放弃所有工作区的修改。git checkout -f
放弃所有工作区以及缓存区的修改如果对于撤销或者恢复暂存区的某个文件,可以先将该文件移除暂存区:
git restore --staged <fileName>
,再使用git checkout -- 文件名
撤销。
分支操作
分支操作相对于在某一条版本线进行分支,将一些开发交给其他人进行并行开发,再在某些版本进行合并,提高开发效率,一般情况下不建议多个分支针对同一个文件进行开发,这样不利于合并。
创建分支
git branch 分支名
查看分支
git branch -v
切换分支
git checkout 分支名
不同的分支的操作另一个分支是不清楚的。
合并分支
-
切换到接受合并的分支
git checkout 接受合并的分支
-
执行
merge
命令git merge 待合并的分支
删除分支
git branch -d 分支名
git 分支冲突
如果多个分支修改了同一个文件,在 pull 的时候会冲突:
解决办法:如果文件很少或分支少,先在 master 中合并,再修改目标文件,最后提交。
如何保证分支之间合并后的同步呢?
两者之间都进行同步保证代码是最新的,互相进行合并
远程仓库
账号注册:
创建 SSH Key:
数据需要保存在远程仓库,服务器需要对身份进行识别,SSH Key 是一种连接加密(私钥),及以后连接不需要密码。
-
ssh-keygen -t rsa -c
默认情况下会在
c:\\Users\家目录\
路径下生成.ssh
目录,里面有一个公开私钥和个人私钥,两个文件: -
ssh -T git@gitee.com
此条命令是查看主机是否与 gitee 网站之间的 ssh 通信是否连接成功
创建远程仓库
在码云或者 GitHub 上创建一个仓库即可。
clone 远程仓库
git clone 仓库地址
推送本地仓库到远程仓库
先将一个版本提交到本地仓库,在进行推送
git push 仓库地址
拉取远程仓库到本地仓库
git pull 仓库地址
是
git fetch 主机名/分支名
拉取远程仓库的数据,获取远程仓库有而本地没有的数据。git merge 主机名/分支名
合并到本仓库当前的分支
的简写。
扩展:远程地址别名设置
查看当前仓库中远程地址的别名:
git remote -v
默认情况下如果是 clone 的远程仓库,里面就有两个别名:
推送和拉去都是 origin 当前clone的远程仓库地址。
增加远程地址
git remote add [别名] [远程地址]
删除远程地址
git remote remove [别名]
解决冲突
如果本地仓库的状态与远程仓库状态不一致,在推送远程仓库时,会尝试冲突推送失败,必须先拉取更新本地仓库,再在本地仓进行处理,最后推送至远程仓库。
如果是在本地仓库 commit 之后,出现了推送冲突的话,再拉取远程仓库时,会与本地仓库 commit 进行分支合并。
Idea 操作 Git
1. idea 配置好 Git
在 Settings 里面找到 Git,配置好 Git。
2. 创建项目并在将其设置为 Git 的本地仓库
选中项目根目录创建 Git 本地仓库。
选择目标文件右键,可以找到 Git,选择相应的 Git 操作。
3. 本地仓库与远程仓库建立同步
3.1 GitHub
如果是 GitHub 的话 idea 默认会有一个 GitHub 的插件,可以百度根据配置进行调整。
3.2 Gitee 码云
idea 的 Gitee 插件是需要下载的,所以先下载插件:
在 Settings 中配置 Gitee 的账户:
本地仓库和远程仓库进行绑定
添加远程仓库 URL 进行管理。
如果添加成功则下一步就是开始 pull 远程仓库的数据到本地仓库。
选中 master,这一步需要本地分支与远程分支关联起来,然后在这里选择需要 pull 下来的远程分支。
如果这一步选中框是空的,则表示本地和远程没有关联,因为本地仓库是我们手动创建的和远程并没有建立联系,所以我们要先让两者关联起来,这样后续的管理中可以更加方便。
打开项目中的 git bash
或者在 idea 项目的控制台中输入:
两个命令:
git pull origin master --allow-unrelated-histories
:允许不相关历史提交,强行拉取合并。
git push --set-upstream origin master
:设置远程的 push 的分支,情况下也是 master。
然后后续设置中,就有了远程分支的选项。可以正常的进行 push 和 pull。
比较常用的是利用 Idea 直接 Clone 远程仓库,这样可以节省很多不必要的麻烦。直接可以和远程仓库保持同步。
在 url 中添加远程仓库链接即可。