> For the complete documentation index, see [llms.txt](https://cifar.gitbook.io/note/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cifar.gitbook.io/note/kai-fa/kai-fa-xiang-guan-gong-ju/chang-yong-kai-fa-gong-ju-mo-kuai.md).

# 常用开发工具模块

## **win 电脑工具**

按键显示： [Carnac](http://code52.org/carnac/)  KeyCastOW

录屏 \[鼠标箭头高亮]： BANDICAM(班迪录屏)

视频剪辑 ：Camtasia

截图： Snipaste

资源管理器搜索： everything

## Git

免密登录使用ssh地址

每次输入账号密码为 https 。使用git地址

### 实践

| 命令                      | 解释      |
| ----------------------- | ------- |
| git branch              | 查看分支    |
| git log                 | 查看提交记录  |
| git push origin dev:dev | 推送到指定分支 |
| git remote -v           | 查看远端库   |
|                         |         |
|                         |         |
|                         |         |
|                         |         |

### 理论↓

### [可视化学习git](https://learngitbranching.js.org/?NODEMO=\&locale=zh_CN)

### 多人协作

* pull request
  * [Github中Pull Request操作](https://www.jianshu.com/p/a31a888ac46b)
  * 可视化学git 网站，\[ 远端 ] \[ level 1] (社交化) 8: 锁定的Main(Locked Main)

![](/files/-MiWRqi5_mn1NRjVZV7v)

* **为什么会被拒绝?**
  * 远程服务器拒绝直接推送(push)提交到main, 因为策略配置要求 pull requests 来提交更新.
  * 你应该按照流程,新建一个分支, 推送(push)这个分支并申请pull request,但是你忘记并直接提交给了main.现在你卡住并且无法推送你的更新.
* **解决办法**
  * 新建一个分支feature, 推送到远程服务器. 然后reset你的main分支和远程服务器保持一致, 否则下次你pull并且他人的提交和你冲突的时候就会有问题.

### origin   &  Git 远程仓库

![](/files/-MiWC5rOh_bIHbhcVBs3)

#### git fetch

![](/files/-MiWE8Fd_ij891A3XymY)

#### git fetch 不会做的事 <a href="#gitfetch-bu-hui-zuo-de-shi" id="gitfetch-bu-hui-zuo-de-shi"></a>

* `git fetch` 并不会改变你本地仓库的状态。它不会更新你的 `main` 分支，也不会修改你磁盘上的文件。
* 理解这一点很重要，因为许多开发人员误以为执行了 `git fetch` 以后，他们本地仓库就与远程仓库同步了。它可能已经将进行这一操作所需的所有数据都下载了下来，但是**并没有**修改你本地的文件。我们在后面的课程中将会讲解能完成该操作的命令&#x20;
* 所以, 你可以将 `git fetch` 的理解为单纯的下载操作。

#### git pull

* 既然我们已经知道了如何用 `git fetch` 获取远程的数据, 现在我们学习如何将这些变化更新到我们的工作当中。
* 其实有很多方法的 —— 当远程分支中有新的提交时，你可以像合并本地分支那样来合并远程分支。也就是说就是你可以执行以下命令:
  * `git cherry-pick o/main`
  * `git rebase o/main`
  * `git merge o/main`
  * 等等
* 实际上，由于先抓取更新再合并到本地分支这个流程很常用，因此 Git 提供了一个专门的命令来完成这两个操作。它就是我们要讲的 `git pull`。 ( 替换 git fetch;  git merge o/main)

#### git push

> *注意 —— `git push` 不带任何参数时的行为与 Git 的一个名为 `push.default` 的配置有关。它的默认值取决于你正使用的 Git 的版本，但是在教程中我们使用的是 `upstream`。 这没什么太大的影响，但是在你的项目中进行推送之前，最好检查一下这个配置。*

> 假设你周一克隆了一个仓库，然后开始研发某个新功能。到周五时，你新功能开发测试完毕，可以发布了。但是 —— 天啊！你的同事这周写了一堆代码，还改了许多你的功能中使用的 API，这些变动会导致你新开发的功能变得不可用。但是他们已经将那些提交推送到远程仓库了，因此你的工作就变成了基于项目**旧版**的代码，与远程仓库最新的代码不匹配了。
>
> 这种情况下, `git push` 就不知道该如何操作了。如果你执行 `git push`，Git 应该让远程仓库回到星期一那天的状态吗？还是直接在新代码的基础上添加你的代码，亦或由于你的提交已经过时而直接忽略你的提交？
>
> 因为这情况（历史偏离）有许多的不确定性，Git 是不会允许你 `push` 变更的。实际上它会强制你先合并远程最新的代码，然后才能分享你的工作。

### 相关概念

#### HEAD

* HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。
* **HEAD 总是指向当前分支上最近一次提交记录**。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。
* HEAD 通常情况下是指向分支名的（如 bugFix）。在你提交时，改变了 bugFix 的状态，这一变化通过 HEAD 变得可见。

> &#x20;如果想看 HEAD 指向，可以通过 `cat .git/HEAD` 查看， 如果 HEAD 指向的是一个引用，还可以用 `git symbolic-ref HEAD` 查看它的指向。

&#x20;分离的 HEAD 就是让其指向了某个具体的提交记录而不是分支名。

![](/files/-MiW3kzJCSnZndBUiILS)

#### 撤销

![](/files/-MiW9GJcAmsxzNrWm7VJ)
