Skip to content

Commit

Permalink
Git保存修改并提交
Browse files Browse the repository at this point in the history
  • Loading branch information
hzjzwcu committed Mar 21, 2024
1 parent 79fb060 commit b9e5f18
Show file tree
Hide file tree
Showing 5 changed files with 127 additions and 39 deletions.
87 changes: 87 additions & 0 deletions docs/JavaScript/问题指南/下载文件.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# 前端文件下载方法总结

前端涉及到的文件下载场景非常多,本文将介绍几种常见的前端文件下载方法,并探讨它们的优缺点。

## 1. 使用 `<a>` 标签

通过 `<a>` 标签的 `download` 属性实现文件下载是最简单且常用的方法。

### 示例代码

```
<a href="http://www.example.com/sample.pdf" download="SampleFile.pdf">下载</a>
```

### 注意事项

- `<a>` 标签的 `download` 属性只能用于**同源**文件。对于跨域的资源,如图片、音视频等,浏览器会默认进行预览而不是下载。

- 可以通过 JavaScript 动态创建 `<a>` 标签来触发下载:

```javascript
const a = document.createElement('a');
a.href = 'http://www.example.com/sample.pdf';
a.download = 'SampleFile.pdf';
a.click();
```

## 2. 使用 `window.open()`

`window.open()` 方法也可以用于触发文件下载,但其行为类似于在新标签页中打开资源。

### 示例代码

```js
window.open('http://www.example.com/sample.pdf', '_blank');
```

### 注意事项

- 不能下载 HTML、XML 等会被浏览器当作文档解析的文件类型,因为这些文件会在新标签页中直接打开。
-`<a>` 标签类似,不能下载跨域文件。

## 3. 使用 `location.href`

直接通过修改 `location.href` 也可以触发下载,但这种方法会导致当前页面跳转。

### 示例代码

```js
location.href = 'http://www.example.com/sample.pdf';
```

## 4. 使用 `XMLHttpRequest` 或 Fetch API

通过 AJAX 请求文件内容,然后使用 JavaScript 创建一个可下载的链接。

### 示例代码

```
javascriptCopy codeconst xhr = new XMLHttpRequest();
xhr.open('GET', 'http://www.example.com/sample.pdf', true);
xhr.responseType = 'blob'; // 重要:设置响应类型为 Blob
xhr.onload = function () {
if (this.status === 200) {
const blob = new Blob([this.response], { type: 'application/pdf' });
const downloadUrl = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = downloadUrl;
a.download = 'SampleFile.pdf';
document.body.appendChild(a);
a.click();
URL.revokeObjectURL(downloadUrl); // 清理资源
}
};
xhr.send();
```

### 注意事项

- 使用 `Blob``URL.createObjectURL()` 可以处理任意类型的文件,并允许设置自定义文件名。
- 需要在下载完成后使用 `URL.revokeObjectURL()` 来释放由 `URL.createObjectURL()` 创建的对象 URL。

## 总结

虽然有多种实现文件下载的方法,但大多数情况下,最终都依赖于浏览器的内置下载功能。选择哪种方法取决于具体的应用场景和需求。
3 changes: 3 additions & 0 deletions docs/Logs/2024.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
# 更新日志

- `2024-03-21` - Git保存修改并提交

- `2024-03-19` - 节流防抖、es6

- `2024-03-17` - 网络基础知识、内存泄漏
Expand Down
4 changes: 0 additions & 4 deletions docs/其他/待归档.md → docs/Logs/待归档.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
# 待归档

https://mp.weixin.qq.com/s/XHZ5DpEMpd37JkDSJ0FxDA

https://mp.weixin.qq.com/s/pRvGXD3AbGlOVA8OpxC18g

https://mp.weixin.qq.com/s/UoYUpCBn7m309PtYcVdafw

https://mp.weixin.qq.com/s/AYdMULe2_Y6KtCO2MlGC0g
Expand Down
2 changes: 0 additions & 2 deletions docs/ReactNative/react-native-worklets-core.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,6 @@ const setNewEndTime = useRunInJS(() => {
}, [endTime]);
```



## 实例Demo

```tsx
Expand Down
70 changes: 37 additions & 33 deletions docs/其他/软件工具的使用/GIT命令.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# GIT 命令

## 基础指令
## 常见指令

- 创建并切换分支
- `git checkout -b 分支名`
Expand All @@ -17,58 +17,61 @@
- `git push origin --delete 分支名`
- 删除本地分支
- `git branch -d 分支名`

## 统计数据

- 查询单人提交某段时间所有记录
- `git log --since ==2021-01-01 --until=2021-05-31 --author="weisheng" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "新增: %s , 移除: %s , 总计: %s \n ", add, subs, loc }'`
- 查询单人提交所有记录
- `git log --author="weisheng" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "新增: %s, 移除 %s, 总计: %s\n", add, subs, loc }'`

## 修改commit

### 1. 修改最近一次的提交

如果你只想修改最近的一次提交(例如,你忘记添加一个文件或者提交信息写错了),你可以使用`git commit --amend`命令。这会将当前的工作树的更改合并到上一个提交中。

```bash
# 修改最近一次提交的提交信息
git commit --amend -m "新的提交信息"
## 保存修改并拉取代码

# 将忘记添加的文件加入到最近一次的提交中
git add 忘记添加的文件
git commit --amend --no-edit # 使用--no-edit保留之前的提交信息
```
在使用 Git 时,如果你想拉取(`pull`)最新的代码,同时又不想影响到你当前已经更改但尚未提交(`commit`)的内容,你可以使用以下几种方法:

### 2. 修改历史提交
`git stash` 可以临时保存你的工作进度,让你的工作目录回到最近一次 `commit` 的状态。之后你可以安全地拉取最新的代码,然后再应用(`apply`)你之前保存的更改。

如果需要修改早期的某个提交,可以使用`git rebase`命令进行交互式变基操作。这种方式比较灵活,但如果是已经推送到远程仓库的提交,需要谨慎使用。
步骤如下:

```bash
git rebase -i HEAD~N # N是要回退的版本数,例如想要修改倒数第3次提交,N应为3
```
1. **保存当前更改**

在打开的编辑器中,找到你想要修改的提交前的文字`pick`改为`edit`,然后保存退出。Git会停在那个提交上,此时你可以使用`git commit --amend`修改提交信息,或者做其他修改然后提交。完成修改后,运行:
```
bashCopy code
git stash
```

```bash
git rebase --continue
```
或者,为你的 stash 创建一个有意义的名字:

来继续应用余下的提交。
```
bashCopy code
git stash save "你的描述信息"
```

### 3. 修改多个连续提交
2. **拉取最新代码**

使用`git rebase -i`命令,并且将所有想要修改的提交前面的`pick`改为`reword`
```
bashCopy code
git pull
```

### 4.合并多个提交
3. **应用之前保存的更改**

使用`git rebase -i`命令,并且将所有想要合并的提交前面的`pick`改为`squash`或者简写`s`(保留第一个不变)。
```
bashCopy code
git stash apply
```

### 注意
如果你创建了多个 stash,你可以通过 `git stash list` 查看所有的 stash,并通过 `git stash apply stash@{n}` 应用指定的 stash,其中 `n` 是你想要应用的 stash 的编号。

- 使用`git rebase`修改历史提交会改变提交的哈希值。如果这些提交已经被推送到了远程仓库,修改后需要强制推送(`git push --force`),这可能会影响其他人的工作。因此,在共享的分支上慎用此操作。
- 在进行任何可能会更改提交历史的操作前,建议先创建一个分支备份,以防不测。
### 注意事项

- 在使用这些命令之前,确保你的工作目录是干净的,即除了你想要保留的更改之外,没有其他未提交的更改。这可以通过 `git status` 命令来检查。
- 如果你使用 `git stash` 并且在 `git stash apply` 之后发现有冲突,你需要手动解决这些冲突。解决冲突后,不要忘记使用 `git add` 将解决后的文件标记为已解决,然后继续你的工作。
- 使用 `git pull --rebase` 时,如果遇到冲突,同样需要手动解决冲突,并使用 `git rebase --continue` 继续 rebase 过程。

选择哪种方法取决于你的具体情况和个人偏好。在处理较大的更改或多个分支时,`git stash` 可能是更安全的选择。对于较小的更改,`git pull --rebase` 可能更方便快捷。

## Github所需修改的hosts
## hosts

```
140.82.112.3 github.com
Expand All @@ -77,4 +80,5 @@ git rebase --continue
185.199.109.153 assets-cdn.github.com
185.199.110.153 assets-cdn.github.com
185.199.111.153 assets-cdn.github.com
```
```

0 comments on commit b9e5f18

Please sign in to comment.