mirror of
https://github.com/LucasVbr/first-contributions.git
synced 2026-05-13 17:21:50 +00:00
Merge pull request #3 from SugarCrash2077/main
Created Chinese Language Support 6 Files added: reverting-a-commit.zh.cn.md removing-branch-from-your-repository.zh.cn.md resolving-merge-conflicts.zh.cn.md resetting-a-branch.zh.cn.md moving-a-commit-to-a-different-branch.zh.cn.md removing-a-file.zh.cn.md
This commit is contained in:
+25
@@ -0,0 +1,25 @@
|
||||
# 移动提交到不同的分支
|
||||
假设你提交了一个更改,然后意识到你提交到了错误的分支。
|
||||
你该如何更改呢?这篇教程将为你解答。
|
||||
|
||||
## 将最新的提交移动到现有分支
|
||||
为此,请输入以下命令:
|
||||
|
||||
```git reset HEAD~ --soft``` - 撤销上一个提交,但保留更改。
|
||||
```git stash``` - 记录当前目录的状态。
|
||||
|
||||
```git checkout name-of-the-correct-branch``` - 切换到正确的分支。
|
||||
```git stash pop``` - 恢复最近的存储状态。
|
||||
```git add .``` - 或者尝试单独添加文件。
|
||||
```git commit -m "your message here"``` - 保存并提交更改。
|
||||
|
||||
现在你的更改已经在正确的分支上了。
|
||||
|
||||
|
||||
### 将最新的提交移动到新分支
|
||||
为此,请输入以下命令:
|
||||
```git branch newbranch``` - 创建一个新分支,保存所有提交。
|
||||
```git reset --hard HEAD~#``` - 将 master 分支回退 # 个提交。记住,这些提交将从 master 中消失。
|
||||
```git checkout newbranch``` - 切换到你创建的新分支,所有提交都会在该分支中。
|
||||
|
||||
记住:任何未提交的更改将会丢失。
|
||||
@@ -0,0 +1,23 @@
|
||||
# 从 Git 中移除文件
|
||||
|
||||
有时你可能想要从 Git 中移除一个文件,但不想从你的计算机中删除它。你可以使用以下命令来实现:
|
||||
|
||||
``git rm <file> --cached``
|
||||
|
||||
## 那么发生了什么?
|
||||
|
||||
Git 将不再跟踪被移除文件的更改。对 Git 来说,就像你删除了这个文件一样。如果你在文件系统中找到这个文件,你会发现它依然存在。
|
||||
|
||||
注意,在上述示例中使用了 `--cached` 标志。如果我们没有加上这个标志,Git 将不仅从仓库中移除文件,还会从你的文件系统中删除它。
|
||||
|
||||
如果你使用 `git commit -m "Remove file1.js"` 提交更改,并通过 `git push origin master` 推送到远程仓库,远程仓库也会删除该文件。
|
||||
|
||||
## 其他功能
|
||||
|
||||
- 如果你想删除多个文件,可以将它们全部包含在同一命令中:
|
||||
|
||||
`git rm file1.js file2.js file3.js --cached`
|
||||
|
||||
- 你可以使用通配符(*)删除相似的文件。例如,如果你想从本地仓库中删除所有 `.txt` 文件:
|
||||
|
||||
`git rm *.txt --cached`
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
# 从你的仓库中移除分支
|
||||
|
||||
如果你已经按照教程进行到此,我们的 `<add-your-name>` 分支已经完成了它的使命,是时候将其从你本地机器的仓库中删除了。虽然这不是必须的,但该分支的名称显示了它的特殊用途,因此它的生命周期可以相应地短一些。
|
||||
|
||||
首先,让我们将你的 `<add-your-name>` 合并到你的 master 分支中,因此切换到 master 分支:
|
||||
```
|
||||
git checkout master
|
||||
```
|
||||
|
||||
将 `<add-your-name>` 合并到 master:
|
||||
```
|
||||
git merge <add-your-name> master
|
||||
```
|
||||
|
||||
在你本地机器的仓库中移除`<add-your-name>` :
|
||||
```
|
||||
git branch -d <add-your-name>
|
||||
```
|
||||
|
||||
现在你已经删除了你本地机器上的 `<add-your-name>` 分支,一切看起来整洁干净。
|
||||
不过,在此时,你应该仍然在你的 GitHub 分叉中有 `<add-your-name>` 分支。然而,在删除之前,请记住,你是从这个远程分支向我的仓库提交了一个 "Pull request"。因此,除非我已经合并了这个请求,否则不要删除这个分支。
|
||||
|
||||
然而,如果我已经合并了你的分支,并且你想删除远程分支,可以使用:
|
||||
```
|
||||
git push origin --delete <add-your-name>
|
||||
```
|
||||
|
||||
现在,你知道如何整理你的分支了。
|
||||
随着时间的推移,我的公共仓库会添加很多提交。而你本地机器和 GitHub 分叉的 master 分支将不会保持同步。因此,为了保持你的仓库与我的同步,请按照下面的步骤进行操作。
|
||||
|
||||
#### [保持你的分叉与仓库同步](keeping-your-fork-synced-with-this-repository.zh-cn.md)
|
||||
@@ -0,0 +1,18 @@
|
||||
# 重置一个分支
|
||||
|
||||
`reset` 是一个可以用来重置仓库(相对于某个提交或分支)的命令。正如其名字所示,重置会丢弃当前(基础)分支上的所有内容,并使其与我们选择重置的目标分支(称为原始分支)完全相同。这实际上意味着,我们将得到一个原始分支的副本,名称为基础分支。<br/>
|
||||
然而,问题是,为什么我们不直接删除基础分支,然后从原始分支中检出一个新的基础分支呢?从技术角度来看,这将与重置具有相同的效果,但在一些工业场景下,我们无法删除分支,或者我们不能删除分支,因为删除分支可能会干扰/破坏 CI/CD 流水线,或者影响正在进行的工作流。因此,为了避免这种可能导致停机的情况,我们建议在需要重置某个分支时使用 `git reset`。
|
||||
|
||||
## 命令
|
||||
|
||||
执行 `git reset` 重置分支非常简单。
|
||||
```
|
||||
git reset <base_branch> <origin_branch>
|
||||
```
|
||||
|
||||
一个示例如下:
|
||||
```
|
||||
git reset stage master --hard
|
||||
```
|
||||
上述命令将 `stage` 分支重置为 `master`,因此 `stage` 分支将与 `master` 完全相同。
|
||||
你可能会想,为什么要使用 `--hard` 标志?这是为了忽略在重置之前或之后被暂存的所有更改。
|
||||
@@ -0,0 +1,36 @@
|
||||
# 什么是合并冲突?
|
||||
|
||||
当你尝试将另一个分支合并到当前工作分支时,你是在将另一个上下文的更改与当前工作文件结合在一起。
|
||||
如果两个人修改了同一文件的相同行,或者一个人决定删除该文件,而另一个人决定修改它,Git 无法识别哪个版本是正确的。Git 会标记该文件为存在冲突 - 在解决冲突之前,你无法继续工作。
|
||||
|
||||
# 如何解决合并冲突?
|
||||
|
||||
当遇到合并冲突时,Git 会通过在文件中将问题区域包裹在“<<<<<<<< HEAD”和“>>>>>>>>>>[other branch name]”中来标记冲突。
|
||||
|
||||
第一个标记后的内容来自你当前的工作分支。尖括号后,Git 会告诉我们更(改来自哪个分支)。一个“=======”行将两个冲突的更改分开。
|
||||
我们的任务是清理这些行:当我们完成后,文件应该看起来正是我们想要的样子。建议咨询写入冲突更改的队友,决定哪个版本应该是最终的。可能是你们其中一个的版本,也可能是两者的混合。
|
||||
|
||||
例如:
|
||||
```
|
||||
<<<<<<< HEAD:mergetest
|
||||
This is my third line
|
||||
=======
|
||||
This is a fourth line I am adding
|
||||
>>>>>>> 4e2b407f501b68f8588aa645acafffa0224b9b78:mergetest
|
||||
```
|
||||
|
||||
`<<<<<<<`:表示合并冲突行的开始。第一组行来自你试图合并更改的文件。
|
||||
`=======`:表示用于比较的断点。分隔用户提交的更改(上方)和来自合并的更改(下方),以便直观地看到差异。
|
||||
`>>>>>>>`:表示合并冲突行的结束。
|
||||
|
||||
你可以通过编辑文件来解决冲突,然后手动合并 Git 难以合并的部分。这可能意味着丢弃你的更改或别人的更改,或者两者的混合。你还需要删除文件中的 '<<<<<<<'、'=======' 和 '>>>>>>>'。
|
||||
|
||||
|
||||
一旦解决了冲突,请使用 `git add` 命令。不要忘记运行测试,因为你需要确保已正确解决冲突。
|
||||
|
||||
你还可以根据所使用的 IDE 下载不同的插件,以便更轻松地解决合并冲突。
|
||||
|
||||
|
||||
# 如何撤销合并?
|
||||
|
||||
如果你想撤销合并,可以使用 `git merge --abort`。
|
||||
@@ -0,0 +1,41 @@
|
||||
# 撤销一个提交
|
||||
|
||||
撤销一个提交意味着创建一个全新的提交,撤销之前提交所做
|
||||
的所有更改。这就像在 Git 中执行 `CTRL + Z`。
|
||||
|
||||
在 Git 中,撤销操作变得更加简单,因为你推送到远程仓库的每个提交都有一个唯一的字母数字键(称为 SHA,安全哈希算法)与之关联。
|
||||
这意味着只要你有该提交的 SHA,你就可以撤销任何提交。
|
||||
但你必须小心按顺序撤销操作,以免破坏你的仓库。
|
||||
|
||||
|
||||
为了获取我们想要撤销的特定提交的 SHA,查看所有提交的日志会很有帮助。
|
||||
要获取此信息,我们可以运行命令:
|
||||
```git log --oneline ```
|
||||
仅运行 ```git log``` 命令也会给我们返回 SHA(长格式)。
|
||||
但使用 ```--oneline``` 标志会告诉 Git 我们希望以简洁(单行)的方式显示,以便更容易阅读。
|
||||
|
||||
当你运行此命令时,显示的前 7 个字符就是所谓的简短提交哈希。
|
||||
|
||||
例如,运行 ```git log --oneline``` 时,我得到的输出如下:
|
||||
```
|
||||
389004d added spacing in title
|
||||
c1b9fc1 Merge branch 'master' into tutorials
|
||||
77eaafd added tutorial for reverting a commit
|
||||
```
|
||||
|
||||
这表明,通过使用 ```git log --oneline```,我们可以获取仓库中所有提交的列表,并附带每个提交的前 7 个字符的 SHA。
|
||||
|
||||
现在,假设我想撤销我提交的 "在标题中添加了空格" 这个更改,以下是我将采取的步骤:
|
||||
|
||||
* 复制该提交的 SHA,在本例中是 ```389004d```
|
||||
* 然后运行命令 ```git revert 389004d```
|
||||
|
||||
这将打开我的文本编辑器,并提示我编辑提交信息。
|
||||
你可以选择保留 Git 的默认提交信息,该信息以 `Revert` 开头,
|
||||
也可以根据自己的喜好自定义提交信息。
|
||||
|
||||
* 接下来,我将保存并关闭文本编辑器。
|
||||
* 返回命令行。
|
||||
* 运行 ```git push origin <branch-name>``` 将撤销的更改推送到 GitHub。
|
||||
|
||||
就这样,变更被撤销。在这种情况下,我的仓库将恢复到 ```c1b9fc1``` 时的状态。
|
||||
Reference in New Issue
Block a user