42,580
stars
+-1
3,164
forks
635
watchers
298
prs
73
issues
0
releases
0
discussions
README
Git飞行规则(Flight Rules)
🌍
English ∙ Español ∙ Русский ∙ 繁體中文 ∙ 简体中文 ∙ 한국어 ∙ Tiếng Việt ∙ Français ∙ 日本語
前言
- 英文原版README
- 翻译可能存在错误或不标准的地方,欢迎大家指正和修改,谢谢!
什么是"飞行规则"?
这是一篇给宇航员(这里就是指使用Git的程序员们)的指南,用来指导问题出现后的应对之法。
飞行规则(Flight Rules) 是记录在手册上的来之不易的一系列知识,记录了某个事情发生的原因,以及怎样一步一步的进行处理。本质上, 它们是特定场景的非常详细的标准处理流程。 [...]
自20世纪60年代初以来,NASA一直在捕捉(capturing)我们的失误,灾难和解决方案, 当时水星时代(Mercury-era)的地面小组首先开始将“经验教训”收集到一个纲要(compendium)中,该纲现在已经有上千个问题情景,从发动机故障到破损的舱口把手到计算机故障,以及它们对应的解决方案。
— Chris Hadfield, 一个宇航员的生活指南(An Astronaut's Guide to Life)。
这篇文章的约定
为了清楚的表述,这篇文档里的所有例子使用了自定义的bash 提示,以便指示当前分支和是否有暂存的变化(changes)。分支名用小括号括起来,分支名后面跟的表示暂存的变化(changes)。
Table of Contents generated with DocToc
- 编辑提交(editting commits)
- 我刚才提交了什么?
- 我的提交信息(commit message)写错了
- 我提交(commit)里的用户名和邮箱不对
- 我想从一个提交(commit)里移除一个文件
- 我想删除我的的最后一次提交(commit)
- 删除任意提交(commit)
- 我尝试推一个修正后的提交(amended commit)到远程,但是报错:
- 我意外的做了一次硬重置(hard reset),我想找回我的内容
- 暂存(Staging)
- 我需要把暂存的内容添加到上一次的提交(commit)
- 我想要暂存一个新文件的一部分,而不是这个文件的全部
- 我想把在一个文件里的变化(changes)加到两个提交(commit)里
- 我想把暂存的内容变成未暂存,把未暂存的内容暂存起来
- 未暂存(Unstaged)的内容
- 我想把未暂存的内容移动到一个新分支
- 我想把未暂存的内容移动到另一个已存在的分支
- 我想丢弃本地未提交的变化(uncommitted changes)
- 我想丢弃某些未暂存的内容
- 分支(Branches)
- 我从错误的分支拉取了内容,或把内容拉取到了错误的分支
- 我想扔掉本地的提交(commit),以便我的分支与远程的保持一致
- 我需要提交到一个新分支,但错误的提交到了main
- 我想保留来自另外一个ref-ish的整个文件
- 我把几个提交(commit)提交到了同一个分支,而这些提交应该分布在不同的分支里
- 我想删除上游(upstream)分支被删除了的本地分支
- 我不小心删除了我的分支
- 我想删除一个分支
- 我想从别人正在工作的远程分支签出(checkout)一个分支
- Rebasing 和合并(Merging)
- 我想撤销rebase/merge
- 我已经rebase过, 但是我不想强推(force push)
- 我需要组合(combine)几个提交(commit)
- 安全合并(merging)策略
- 我需要将一个分支合并成一个提交(commit)
- 我只想组合(combine)未推的提交(unpushed commit)
- 检查是否分支上的所有提交(commit)都合并(merge)过了
- 交互式rebase(interactive rebase)可能出现的问题
- 这个rebase 编辑屏幕出现'noop'
- 有冲突的情况
- Stash
- 暂存所有改动
- 暂存指定文件
- 暂存时记录消息
- 使用某个指定暂存
- 暂存时保留未暂存的内容
- 杂项(Miscellaneous Objects)
- 克隆所有子模块
- 删除标签(tag)
- 恢复已删除标签(tag)
- 已删除补丁(patch)
- 跟踪文件(Tracking Files)
- 我只想改变一个文件名字的大小写,而不修改内容
- 我想从Git删除一个文件,但保留该文件
- 配置(Configuration)
- 我想给一些Git命令添加别名(alias)
- 我想缓存一个仓库(repository)的用户名和密码
- 我不知道我做错了些什么
- 其它资源(Other Resources)
- 书(Books)
- 教程(Tutorials)
- 脚本和工具(Scripts and Tools)
- GUI客户端(GUI Clients)
编辑提交(editting commits)
我刚才提交了什么?
如果你用 git commit -a 提交了一次变化(changes),而你又不确定到底这次提交了哪些内容。 你就可以用下面的命令显示当前HEAD上的最近一次的提交(commit):
sh
(main)$ git show
或者
sh
$ git log -n1 -p
我的提交信息(commit message)写错了
如果你的提交信息(commit message)写错了且这次提交(commit)还没有推(push), 你可以通过下面的方法来修改提交信息(commit message):
sh
$ git commit --amend --only
这会打开你的默认编辑器, 在这里你可以编辑信息. 另一方面, 你也可以用一条命令一次完成:
sh
$ git commit --amend --only -m 'xxxxxxx'
如果你已经推(push)了这次提交(commit), 你可以修改这次提交(commit)然后强推(force push), 但是不推荐这么做。
我提交(commit)里的用户名和邮箱不对
如果这只是单个提交(commit),修改它:
sh
$ git commit --amend --author "New Authorname "
如果你需要修改所有历史, 参考 'git filter-branch'的指南页.Top issues
#162Translation into other languages84 comments · 2017-12-02#230Deploy to GitHub Pages with Travis-CI8 comments · 2018-10-18#214git apply patch to the rescue (question)5 comments · 2018-08-28#204Are necessary any implicit changes made by GitLocalize?4 comments · 2018-01-10#296Undoing a keep reset the same as undoing a hard reset3 comments · 2020-06-12#288I squashed a PR update onto the PR's commit2 comments · 2019-10-17#351“I committed to main instead of a new branch”, but new code discarded1 comments · 2023-06-05#310Renaming the default branch from `master` to `main`1 comments · 2021-01-16