Git操作步骤图解_GitBash
Git操作步骤图解_GitBash
(〇)前戏
比较重要的内容
记得要在github上注册账户,或者gitee(国内的比较快)
Bash窗口里只要是没有输入符
$就不能输入Bash窗口里用鼠标右键复制粘贴千万不要按ctrl + C/ctrl + V,特此提醒
Bash窗口中文乱码:右键->Options->左边Text->
- Local->zh_CN
- Character set->UTF-8
- Save
git config --global i18n.commitencoding utf-8git config --global i18n.logoutputencoding utf-8
SSH钥匙
- 本则步骤出自于简书, 如果没有SSH,就无法与远程数据通信
- 在桌面上右键——>
Git Bash Here cd ~/.ssh查看有没有密钥,如果右边黄字变化,说明有密钥git config --global user.name "用户名"(注意是英文引号)git config --global user.email "邮箱"(注意是英文引号)ssh-keygen -t rsa生成公钥和私钥,写入github里的用户名密码git config -l查看状态cat ~/.ssh/id_rsa.pub查看公钥cat ~/.ssh/id_rsa查看私钥
浏览器登不上GitHub怎么办
- 进入站长工具
- 域名搜索:
github.com,找到TTL值最低的数字IP,一般是XXX.XXX.XXX.XXX,填入Host - 域名搜索:
github.global.ssl.fastly.net,填入Host同上
1 | 类似: |
Git常用命令
1 | git init 【初始化仓库】 |
(一)初始化
- 在想要作为仓库的电脑目录里右键打开git小黑窗口——>
Git Bash Here

- 初始化仓库——>
git init

- 确保目录里除了想要作为版本迭代的文件还有一个仓库隐藏文件
.git

- 如果显示了这一行, 表示你没有登录,git未设置用户信息
- 输入
Run下面的两行就行

- 接着查看仓库状态——>
git status On branch master表示当前分支叫master(主分支),跟右上角一致No commits yet表示仓库里还没有声明版本Untracked files表示拥有无效文件,无效文件用红色表示

git status里文件四大状态1
2
3
4无效文件 untracked【红色】【新文件】
暂存文件 staged【绿色】【进入暂存区的无效文件或修改文件】
有效文件 tracked【不显示】【进入版本的暂存文件】
修改文件 modified【红/绿】【改动的有效文件】git add 文件名能够将某一红色文件变成绿色git add .能够将所有红色文件变成绿色

(二)创建
git commit -m 版本名用于创建一个版本

git log用于查看所有版本及其状态- 使用
--oneline可以看简要日志 - 使用
--graph可以看日志图表 - 使用
--reverse可以看倒序日志 - 使用
--all可以看全部分支的版本 - 使用
--n数字可以查看最近几次版本 - 使用
--author 作者名可以依作者筛选 - 使用
--since{2020-12-21}和--before{2020-12-21}可以依时间筛选 - 使用
--decorate可以查看标签
- 使用
- 黄色乱码是指针地址,一般使用前7位用于定位该地址:
058544f (HEAD -> master)代表当前用户位于master分支下Author版本创建作者,Date版本创建日期

(三)更新
- 打开文件
document.docx,在保存版本version_1时里面没有写任何东西:

- 对文件做修改,并保存

- 然后
git status检查文件状态

Changes not staged for commit表示非有效文件- 红色
modified表示修改文件 - 这时
git add .就可以将修改文件加入暂存文件 - 当然,无论是红是绿都不是有效文件,因为有效文件不显示

- 将暂存文件保存成版本
version_2- 如果修改了文件,不想保存成新的版本,可以选择
git commit --amend --amend用于修复最近一次保存的版本-i
- 如果修改了文件,不想保存成新的版本,可以选择
- 查看版本状态
(HEAD -> master)指向的是当前所处版本以及分支

(四)回溯
回溯基础
- 突然就想让文件回到
version_1的状态了 git reset 版本哈希或前7位 --soft/hard/mixed用于回溯版本- 如果使用
--soft,表示更改当前用户位置HEAD,不会修改源文件,将【回溯前版本与回溯版本的差异】视为已暂存修改文件,git status显示绿色修改文件 - 如果使用
--hard,表示更改当前用户位置HEAD,会修改源文件 - 如果使用
--mixed,表示更改当前用户位置HEAD,不会修改源文件,将【回溯前版本与回溯版本的差异】视为未暂存修改文件,git status显示红色修改文件 git reset 版本哈希或前7位不一定要去找到那些哈希值,可以用以下方法来定位:↓HEAD指代当前的版本HEAD^^^指代倒数第四个版本HEAD~3指代倒数第四个版本
- 如果使用
HEAD is now at 058544f version_1表示当前位于version_1版本

- 但是查看版本列表时,之后的版本消失了

- 打开文件
document.docx,发现文件回到了version_1的状态:

- 这说明回溯有效
- 但如何返回到
version_2呢 - 使用
git reflog查看历史 - 可以看到
version_2的哈希值前7位为2920056

git reset 版本哈希或前7位 --soft/hard/mixed回到目标版本

回溯进阶
- 这一节主要讲
git rebase -i 开始版本哈希值 结束版本哈希值命令 - 这个命令会生成一个交互式文本编辑窗口,可以是任何文本编辑器
- 这里它自动给我打开了vscode

- 它的流程是:修改里面的前几行指令,保存关闭,vscode会重新弹出新的窗口,以此类推
- 下面几行是里面的指令提示
1 | # p, pick <commit> = use commit |
- 当
rebase执行完之后,如果指针出于游离状态detached,就使用:git rebase --abort来退出rebase
(五)分支
- 如果说上面的回溯很搞人心态,那么就需要使用分支系统
- 在例子里,假设希望在
version_2的基础上继续增加版本,但希望版本与版本之间的切换更加的自如 - 那么就在
version_2这里新建分支 git checkout -b 分支名新建一个分支并进入分支,或者使用git branch 分支名创建分支- 然后就发现:右边蓝字修改了

- 再回到
master主分支

- 再新建一个分支,再回到主分支

git branch用于查看所有分支- 带
*号的分支是当前所处分支

- 现在进入
branch_1,修改document.docx文件

- 保存,进入暂存,一条龙

- 在
branch_1保存成一个版本

- 现在在
branch_1和master里查看现在的版本状态 - 可以发现,分支里创建的版本在
master里不显示,因为是子分支版本 (master, branch_2)表示version_2版本在两个分支里都能访问
branch_1
master
- 使用
git checkout 分支名来跳转当前分支,会发现文件夹里的文件也在实时地变换


- 所以,现在的关系是这样的:
- 使用
git branch -d 分支名来删除branch_2

- 现在重新创建这个
branch_2 - 喔嚯不小心打成了
branch_3,使用git branch -m 分支名来重命名当前分支

- 修改文件并保存版本

- 删除该分支
- 首先报了个
... is not fully merged表示该分支还没有被合并,系统取消了这次删除指令 - 于是使用
git branch -D 分支名来强制删除该分支

(六)分支合并
- 什么是分支合并
- 就是从
master/version_2里分了branch_1/version_3和branch_2/version_4,将version_3和version_4合并到master/version_2里 - 于是我们先恢复
branch_2 - 查看历史,找到哈希码
1056d61,虽然不是显示branch_2,但从version_4可以推断出应该就是它

- 使用
git checkout -b 分支名 哈希值这样就恢复了branch_2

- 回到
master,使用git merge 分支名来合并分支 - 合并
branch_1时显示正常 - 合并
branch_2时发生了冲突,因为document.docx文件在两个分支版本中内容不同 - 发生冲突后,git会进行自动合并处理,但是word的编码出现了问题
- 这说明了两个问题:
- 如果修改了
branch_2的问题,就能正常合并 - word格式无法正常自动合并,可以尝试其他文件格式
- 如果修改了
- 出现了git 二进制文件冲突问题
warning:Cannot merge binary files,超纲了

- 当你修改好了冲突之后,回来一看:地址位于
(master|MERGING) - 这时就需要回退到当前版本:
git reset HEAD --hard,因为HEAD指的是当前环境

- 将
.git和document.docx删除,我们重来,嘿嘿(没有翻车) - 这次我使用
.txt文件,里面啥都没写
- 标准一条龙

- 再打一套军体拳(应该知道写的是啥)
- 在两个不同版本里,也对txt文件做了版本修改

- 接着合并

- 因为txt文件编码符合要求,所以合并正常,没有warning
- git贴心地将txt改成了这样:

- 用这种方式来提示你这里有冲突(有点傻)
- 你就把txt改成你想要的样子
- 然后就新建一个分支,在新的分支底下保存新的版本(保证更新在平行版本下)


- 平行分支下版本也是平行的,分支与分支之间跳跃也非常的方便
- 可以想象:版本是横向的,分支是纵向的
(七)多人运动
多人运动基础
- 在git上创建账户
- Repositories就是仓库,去New一个

- 这就是新创建的仓库,可以等同于一个服务器端的仓库,用来和本地仓库沟通
- 左上角的
main▲可以用来切换主分支,它默认是main

- 点开
Code▲下拉菜单,在HTTPS底下可以找到该仓库的地址

- 我们的带
.git隐藏文件的文件夹就是一个本地目录 - 使用
git remote add 自定义远程主机名 <github上的仓库地址,以.git结尾>建立远程链接 - 你如果修改好了本地文件,最好新建一个分支来保存版本,当然,不这么做也不会出问题
- 使用
git push 远程主机名 本地分支名:远程分支名来将本地分支推送到远程主机的远程分支 ↓ - 举个例子,比如说:
-
git push origin master就是git push origin master:master git push origin master:master才是完整表达- 如果出现红色
[rejected]错误,说明服务器版本与本地版本不一致,则: - 使用
git push -u origin 本地分支名:远程分支名 -f来解决
-
- 这里不该写
master的,因为服务器上的默认分支是main

- Git就会弹出一个Github登录窗口
登录就完事儿了,毕竟是在github上有号的人
没完呢,还会弹出OpenSSH的准入窗口,就把Github用户名和密码填上去就行
- 就会显示这些内容:

- 将服务器的分支跳到
master

- 就能看到本地上传成功的消息

- 但是我们的
test.txt文件的版本还处于version_2,是因为: - 这行指令:
git push 远程主机名 本地分支名:远程分支名写错了 - 应该改为:
git push origin branch_3:master

- 刷新网页,实时更新

- 好耶,可以把任何东西传到服务器上!
- 那别人怎么下载呢
- 举个例子,狗屁不通文章生成器这个仓库
- 点击
Code▲复制仓库链接

- 随便在哪新建一个文件夹:

- 右键——>
Git Bash Here - 下载:
git clone <仓库链接,以.git结尾>

- 你就下载了源码

- 使用
git clone你就可以下载github服务器上的所有文件 - 注意,在
BullshitGenerator目录里,同样有一个.git的隐藏文件 - 这说明
BullshitGenerator目录也是一个本地仓库
多人运动进阶
回到我们的
git_test目录假设说有人更新了github上的文件,你也必须更新本地文件
- 可以直接在文件夹
git clone,但是有风险,我们不用 - 也可以使用如下方法:↓
- 可以直接在文件夹
第一步也是最重要的一步:新建一个分支并进入,记住,这是个坑,我检查了好几个小时
git merge用于合并本地已修改代码git fetch 远程主机名用于抓取服务器文件git merge 远程主机名/远程分支名用于将本地文件与服务器同步,并在刚才创建的分支本地创建一个新的版本,版本无法重命名,只能commit一个新的来命名

- 我如何删除服务器上的某个分支?
- 先使用
git branch -a查看所有分支列表- 白色
main是本地分支 - 绿色
master是当前分支 - 红色是服务器分支,都有
remote标识
- 白色

- 先将当前分支转到本地最大分支,比如说是
master

- 假设说要删掉
remotes/origin/master的话, - 使用
git push origin --delete 该删除的分支名

多人运动流程简略
1 | 链接服务器:(只用执行一次,git会记住服务器地址的) |

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Iamsleepingnow 世界!



