导航:首页 > 程序命令 > 专治程序员开工指南

专治程序员开工指南

发布时间:2023-12-12 02:42:07

‘壹’ 45 个 Git 经典操作场景,专治不会合代码-

git 对于大家应该都不太陌生,熟练使用git已经成为程序员的一项基本技能,尽管在工作中有诸如 Sourcetree 这样牛X的客户端工具,使得合并代码变的很方便。但找工作面试和一些需彰显个人实力的场景,仍然需要我们掌握足够多的git命令

下边我们整理了45个日常用git合代码的经典操作场景,基本覆盖了工作中的需求。

如果你用 git commit -a 提交了一次变化(changes),而你又不确定到底这次提交了哪些内容。你就可以用下面的命令显示当前 HEAD 上的最近一次的提交(commit):

或者

如果你的提交信息( commit message )写错了且这次提交(commit)还没有推(push), 你可以通过下面的方法来修改提交信息( commit message ):

这会打开你的默认编辑器, 在这里你可以编辑信息. 另一方面, 你也可以用一条命令一次完成:

如果你已经推(push)了这次提交(commit), 你可以修改这次提交(commit)然后强推( force push ), 但是不推荐这么做。

如果这只是单个提交(commit),修改它:

如果你需要修改所有 历史 , 参考 'git filter-branch'的指南页.

通过下面的方法,从一个提交(commit)里移除一个文件:

这将非常有用,当你有一个开放的补丁( open patch ),你往上面提交了一个不必要的文件,你需要强推( force push )去更新这个远程补丁。

如果你需要删除推了的提交( pushed commits ),你可以使用下面的方法。可是,这会不可逆的改变你的 历史 ,也会搞乱那些已经从该仓库拉取(pulled)了的人的 历史 。简而言之,如果你不是很确定,千万不要这么做。

如果你还没有推到远程, 把Git重置(reset)到你最后一次提交前的状态就可以了(同时保存暂存的变化):

这只能在没有推送之前有用. 如果你已经推了, 唯一安全能做的是 git revert SHAofBadCommit , 那会创建一个新的提交(commit)用于撤消前一个提交的所有变化(changes);或者, 如果你推的这个分支是rebase-safe的 (例如:其它开发者不会从这个分支拉), 只需要使用 git push -f 。

同样的警告:不到万不得已的时候不要这么做.

或者做一个 交互式rebase 删除那些你想要删除的提交(commit)里所对应的行。

注意, rebasing(见下面)和修正(amending)会用一个 新的提交(commit)代替旧的 , 所以如果之前你已经往远程仓库上推过一次修正前的提交(commit),那你现在就必须强推( force push ) ( -f )。注意 – 总是 确保你指明一个分支!

一般来说, 要避免强推 . 最好是创建和推(push)一个新的提交(commit),而不是强推一个修正后的提交。后者会使那些与该分支或该分支的子分支工作的开发者,在源 历史 中产生冲突。

如果你意外的做了 git reset --hard , 你通常能找回你的提交(commit), 因为Git对每件事都会有日志,且都会保存几天。

你将会看到一个你过去提交(commit)的列表, 和一个重置的提交。选择你想要回到的提交(commit)的SHA,再重置一次:

这样就完成了。

一般来说, 如果你想暂存一个文件的一部分, 你可这样做:

-p 简写。这会打开交互模式, 你将能够用 s 选项来分隔提交(commit);然而, 如果这个文件是新的, 会没有这个选择, 添加一个新文件时, 这样做:

然后, 你需要用 e 选项来手动选择需要添加的行,执行 git diff --cached 将会显示哪些行暂存了哪些行只是保存在本地了。

git add 会把整个文件加入到一个提交. git add -p 允许交互式的选择你想要提交的部分.

多数情况下,你应该将所有的内容变为未暂存,然后再选择你想要的内容进行commit。但假定你就是想要这么做,这里你可以创建一个临时的commit来保存你已暂存的内容,然后暂存你的未暂存的内容并进行stash。然后reset最后一个commit将原本暂存的内容变为未暂存,最后stash pop回来。

注意1: 这里使用 pop 仅仅是因为想尽可能保持幂等。注意2: 假如你不加上 --index 你会把暂存的文件标记为为存储。

如果你只是想重置源(origin)和你本地(local)之间的一些提交(commit),你可以:

重置某个特殊的文件, 你可以用文件名做为参数:

如果你想丢弃工作拷贝中的一部分内容,而不是全部。

签出(checkout)不需要的内容,保留需要的。

另外一个方法是使用 stash , Stash所有要保留下的内容, 重置工作拷贝, 重新应用保留的部分。

或者, stash 你不需要的部分, 然后stash drop。

这是另外一种使用 git reflog 情况,找到在这次错误拉(pull) 之前HEAD的指向。

重置分支到你所需的提交(desired commit):

完成。

先确认你没有推(push)你的内容到远程。

git status 会显示你领先(ahead)源(origin)多少个提交:

一种方法是:

在main下创建一个新分支,不切换到新分支,仍在main下:

把main分支重置到前一个提交:

HEAD^ 是 HEAD^1 的简写,你可以通过指定要设置的 HEAD 来进一步重置。

或者, 如果你不想使用 HEAD^ , 找到你想重置到的提交(commit)的hash( git log 能够完成), 然后重置到这个hash。使用 git push 同步内容到远程。

例如, main分支想重置到的提交的hash为 a13b85e :

签出(checkout)刚才新建的分支继续工作:

假设你正在做一个原型方案(原文为working spike (see note)), 有成百的内容,每个都工作得很好。现在, 你提交到了一个分支,保存工作内容:

当你想要把它放到一个分支里 (可能是 feature , 或者 develop ), 你关心是保持整个文件的完整,你想要一个大的提交分隔成比较小。

假设你有:

我去可以通过把内容拿到你的分支里,来解决这个问题:

这会把这个文件内容从分支 solution 拿到分支 develop 里来:

然后, 正常提交。

假设你有一个 main 分支, 执行 git log , 你看到你做过两次提交:

让我们用提交hash(commit hash)标记bug ( e3851e8 for #21, 5ea5173 for #14).

首先, 我们把 main 分支重置到正确的提交( a13b85e ):

现在, 我们对 bug #21 创建一个新的分支:

接着, 我们用 _cherry-pick_ 把对 bug #21 的提交放入当前分支。这意味着我们将应用(apply)这个提交(commit),仅仅这一个提交(commit),直接在HEAD上面。

这时候, 这里可能会产生冲突, 参见交互式 rebasing 章 冲突节 解决冲突.

再者, 我们为bug #14 创建一个新的分支, 也基于 main 分支

最后, 为 bug #14 执行 cherry-pick :

一旦你在github 上面合并(merge)了一个 pull request , 你就可以删除你fork里被合并的分支。如果你不准备继续在这个分支里工作, 删除这个分支的本地拷贝会更干净,使你不会陷入工作分支和一堆陈旧分支的混乱之中。

如果你定期推送到远程, 多数情况下应该是安全的,但有些时候还是可能删除了还没有推到远程的分支。让我们先创建一个分支和一个新的文件:

添加文件并做一次提交

现在我们切回到主(main)分支,‘不小心的’删除 my-branch 分支

在这时候你应该想起了 reflog , 一个升级版的日志,它存储了仓库(repo)里面所有动作的 历史 。

正如你所见,我们有一个来自删除分支的提交hash(commit hash),接下来看看是否能恢复删除了的分支。

看! 我们把删除的文件找回来了。Git的 reflog 在rebasing出错的时候也是同样有用的。

删除一个远程分支:

你也可以:

删除一个本地分支:

首先, 从远程拉取(fetch) 所有分支:

假设你想要从远程的 daves 分支签出到本地的 daves

( --track 是 git checkout -b [branch] [remotename]/[branch] 的简写)

这样就得到了一个 daves 分支的本地拷贝, 任何推过(pushed)的更新,远程都能看到.

你可以合并(merge)或rebase了一个错误的分支, 或者完成不了一个进行中的rebase/merge。Git 在进行危险操作的时候会把原始的HEAD保存在一个叫ORIG_HEAD的变量里, 所以要把分支恢复到rebase/merge前的状态是很容易的。

不幸的是,如果你想把这些变化(changes)反应到远程分支上,你就必须得强推( force push )。是因你快进( Fast forward )了提交,改变了Git 历史 , 远程分支不会接受变化(changes),除非强推(force push)。

这就是许多人使用 merge 工作流, 而不是 rebasing 工作流的主要原因之一, 开发者的强推(force push)会使大的团队陷入麻烦。使用时需要注意,一种安全使用 rebase 的方法是,不要把你的变化(changes)反映到远程分支上, 而是按下面的做:

假设你的工作分支将会做对于 main 的pull-request。一般情况下你不关心提交(commit)的时间戳,只想组合 所有 提交(commit) 到一个单独的里面, 然后重置(reset)重提交(recommit)。确保主(main)分支是最新的和你的变化都已经提交了, 然后:

如果你想要更多的控制, 想要保留时间戳, 你需要做交互式rebase (interactive rebase):

如果没有相对的其它分支, 你将不得不相对自己的 HEAD 进行 rebase。例如:你想组合最近的两次提交(commit), 你将相对于 HEAD~2 进行rebase, 组合最近3次提交(commit), 相对于 HEAD~3 , 等等。

在你执行了交互式 rebase的命令(interactive rebase command)后, 你将在你的编辑器里看到类似下面的内容:

所有以 # 开头的行都是注释, 不会影响 rebase.

然后,你可以用任何上面命令列表的命令替换 pick , 你也可以通过删除对应的行来删除一个提交(commit)。

例如, 如果你想 单独保留最旧(first)的提交(commit),组合所有剩下的到第二个里面 , 你就应该编辑第二个提交(commit)后面的每个提交(commit) 前的单词为 f :

如果你想组合这些提交(commit) 并重命名这个提交(commit) , 你应该在第二个提交(commit)旁边添加一个 r ,或者更简单的用 s 替代 f :

你可以在接下来弹出的文本提示框里重命名提交(commit)。

如果成功了, 你应该看到类似下面的内容:

--no-commit 执行合并(merge)但不自动提交, 给用户在做提交前检查和修改的机会。 no-ff 会为特性分支(feature branch)的存在过留下证据, 保持项目 历史 一致。

有时候,在将数据推向上游之前,你有几个正在进行的工作提交(commit)。这时候不希望把已经推(push)过的组合进来,因为其他人可能已经有提交(commit)引用它们了。

这会产生一次交互式的rebase(interactive rebase), 只会列出没有推(push)的提交(commit), 在这个列表时进行reorder/fix/squash 都是安全的。

检查一个分支上的所有提交(commit)是否都已经合并(merge)到了其它分支, 你应该在这些分支的head(或任何 commits)之间做一次diff:

这会告诉你在一个分支里有而另一个分支没有的所有提交(commit), 和分支之间不共享的提交(commit)的列表。另一个做法可以是:

如果你看到的是这样:

这意味着你rebase的分支和当前分支在同一个提交(commit)上, 或者 领先(ahead) 当前分支。你可以尝试:

如果你不能成功的完成rebase, 你可能必须要解决冲突。

首先执行 git status 找出哪些文件有冲突:

在这个例子里面, README.md 有冲突。打开这个文件找到类似下面的内容:

你需要解决新提交的代码(示例里, 从中间 == 线到 new-commit 的地方)与 HEAD 之间不一样的地方.

有时候这些合并非常复杂,你应该使用可视化的差异编辑器(visual diff editor):

在你解决完所有冲突和测试过后, git add 变化了的(changed)文件, 然后用 git rebase --continue 继续rebase。

如果在解决完所有的冲突过后,得到了与提交前一样的结果, 可以执行 git rebase --skip 。

任何时候你想结束整个rebase 过程,回来rebase前的分支状态, 你可以做:

暂存你工作目录下的所有改动

你可以使用 -u 来排除一些文件

假设你只想暂存某一个文件

假设你想暂存多个文件

这样你可以在 list 时看到它

首先你可以查看你的 stash 记录

然后你可以 apply 某个 stash

此处, 'n'是 stash 在栈中的位置,最上层的 stash 会是0

除此之外,也可以使用时间标记(假如你能记得的话)。

你需要手动create一个 stash commit , 然后使用 git stash store 。

如果已经克隆了:

如果你想恢复一个已删除标签(tag), 可以按照下面的步骤: 首先, 需要找到无法访问的标签(unreachable tag):

记下这个标签(tag)的hash,然后用Git的 update-ref

这时你的标签(tag)应该已经恢复了。

如果某人在 GitHub 上给你发了一个 pull request , 但是然后他删除了他自己的原始 fork, 你将没法克隆他们的提交(commit)或使用 git am 。在这种情况下, 最好手动的查看他们的提交(commit),并把它们拷贝到一个本地新分支,然后做提交。

做完提交后, 再修改作者,参见变更作者。然后, 应用变化, 再发起一个新的 pull request 。

在 OS X 和 Linux 下, 你的 Git的配置文件储存在 ~/.gitconfig 。我在 [alias] 部分添加了一些快捷别名(和一些我容易拼写错误的),如下:

你可能有一个仓库需要授权,这时你可以缓存用户名和密码,而不用每次推/拉(push/pull)的时候都输入,Credential helper能帮你。

你把事情搞砸了:你 重置(reset) 了一些东西, 或者你合并了错误的分支, 亦或你强推了后找不到你自己的提交(commit)了。有些时候, 你一直都做得很好, 但你想回到以前的某个状态。

这就是 git reflog 的目的, reflog 记录对分支顶端(the tip of a branch)的任何改变, 即使那个顶端没有被任何分支或标签引用。基本上, 每次HEAD的改变, 一条新的记录就会增加到 reflog 。遗憾的是,这只对本地分支起作用,且它只跟踪动作 (例如,不会跟踪一个没有被记录的文件的任何改变)。

上面的reflog展示了从main分支签出(checkout)到2.2 分支,然后再签回。那里,还有一个硬重置(hard reset)到一个较旧的提交。最新的动作出现在最上面以 HEAD@{0} 标识.

如果事实证明你不小心回移(move back)了提交(commit), reflog 会包含你不小心回移前main上指向的提交(0254ea7)。

然后使用 git reset 就可以把main改回到之前的commit,这提供了一个在 历史 被意外更改情况下的安全网。

‘贰’ 求《程序员健康指南》全文免费下载百度网盘资源,谢谢~

《程序员健康指南》网络网盘pdf最新全集下载:
链接: https://pan..com/s/1Y7zFA_9M0YwA1miaZTWR-w

?pwd=v6fd 提取码: v6fd
简介:本书是为程序员量身制作的健康指南,针对头痛、眼部疲劳、背部疼痛和手腕疼痛等常见的问题,简要介绍了其成因、测试方法,并列出了每天的行动计划,从运动、饮食等方面给出详细指导,帮助程序员在不改变工作方式的情况下轻松拥有健康。

‘叁’ 小白,想入门程序员,应该从什么开始学,顺序是什么

小白想要成为程序员,首选是选择一门合适的语言,比如说:Python、Java、C、C++、GO语言等;其次,选择合适的学习方式,比如培训,周末班、脱产班还是网络班。
如果完全没有编程基础,建议大家学习Python,Python入门简单、语法清晰、通俗易懂,非常适合零基础人员。

‘肆’ 程序员必读的14本书籍

程序员必读书籍有哪些呢?下面是我精心为您整理的程序员必读的14本书籍,希望您喜欢!

程序员必读的14本书籍

1、《代码大全》 史蒂夫·迈克康奈尔

“优秀的编程实践的网络全书,《代码大全》注重个人技术,其中所有东西加起来, 就是我们本能所说的“编写整洁的代码”。这本书有50页在谈论代码布局。” —— Joel Spolsky

Steve McConnell的原作《代码大全》(第1版)是公认的关于编程的最佳实践指南之一, 在过去的十多年间,本书一直在帮助开发人员编写更好的软件。

无论您的经验水平如何,也不管您在怎样的开发环境中工作,也无论项目是大是小, 本书都将激发您的思维并帮助您构建高品质的代码。

2、《计算机程序的构造和解释》

《代码大全》、《重构》和《设计模式》这些经典书会教给你高效的工作习惯和交易细节。 其他像《人件集》、《计算机编程心理学》和《人月神话》这些书会深入软件开发的心理层面。 其他书籍则处理算法。这些书都有自己所属的位置。

然而《计算机程序的构造和解释》与这些不同。 这是一本会启发你的书,它会燃起你编写出色程序的热情; 它还将教会你认识并欣赏美; 它会让你有种敬畏,让你难以抑制地渴望学习更多的东西。

其他书或许会让你成为一位更出色的程序员,但此书将一定会让你成为一名程序员。

3、《C程序设计语言》

《C程序设计语言》(第2版新版)原着即为C语言的设计者之一Dennis M.Ritchie和着名的计算机科学家Brian W.Kernighan合着的 一本介绍C语言的权威经典着作。 我们现在见到的大量论述C语言程序设计的教材和专着均以此书为蓝本。

原着第1版中介绍的C语言成为后来广泛使用的C语言版本——标准C的基础。

人们熟知的“hello,world”程序就是由本书首次引入的,现在,这一程序已经成为所有程序设计语言入门的第一课。

4、程序员思维修炼(修订版)

生命中没有什么是一成不变的,人们需要改变自己的习惯和方法。不论你是程序员、软件公司管理者、技术奇人还是思想家,或者你只是想让自己的大脑更聪明一点儿,所有尝试改变自己的人,请把本书当作改变的开始……

5、系统化思维导论

关注人文,掌握思维法则,揭开科学与技术的神秘面纱

“它给我的震撼是第一次我能从全局的角度去看待各个学科,科学也不再是冷冰冰的割裂了的教条,不再是难以理解的一堆符号。”

6、优秀的叛逆者:引领组织变革的力量

Lois Kelly和Carmen Medina用她们的实战经验,向我们展示了如何在工作中赢得信赖、提出想法、处理人际关系、管理冲突和保持理智。”

——亚当•格兰特,沃顿商学院教授,《纽约时报》畅销书Give and Take的作者

7、《重构:改善既有代码的设计》

《重构:改善既有代码的设计》适合软件开发人员、项目管理人员等阅读, 也可作为高等院校计算机及相关专业师生的参考读物。

8、《Site Reliability Engineering》

《SRE:Google运维解密》可以让读者学习到Google工程师在提高系统部署规模、改进可靠性和资源利用效率方面的指导思想与具体实践——这些都是可以立即直接应用的宝贵经验。任何一个想要创建、扩展大规模集成系统的人都应该阅读,该书针对如何构建一个可长期维护的系统提供了非常宝贵的实践经验。

9、《Refactoring》

那时候当我读这本《重构:改善既有代码的设计》时,由于它在关于代码异味的单独章节所花的篇幅,使得这本书非常值这个价。该书非常成功,因为它使重构和代码异味的观念成为主流。

Steve Yegge曾对这本书不吝赞誉之词:

2003年10月,我第一次阅读这本书,有一种不寒而粟的感觉。如果你意识到,当你想离职时,你已经工作5年。转天我就随意问周围:“嗯,你已经读过重构方面的书,对吧?我只是随便问问,因为我很久以前读过,当然不是现在。”在我所调查的20个人中,只有一个人

10、《Peopleware》

在大学时我读到这本《人件》,该书似乎很令人信服,甚至所有的研究结果都支持该书的观点:不设置截止日期就比设置截止日期要好;办公室比隔间要好,等等。所有开发人员跟我讨论的时候,基本都赞同这些观点。

11、《编程珠玑》

尽管我不得不羞愧地承认,书中一半的东西我都没有理解,但我真的推荐《编程珠玑》,书中有些令人惊奇的东西。 – Matt Warren

12、《修改代码的艺术》by Michael Feathers

我认为没有任何一本书能向这本书一样影响了我的编程观点。它明确地告诉你如何处理其他人的代码,含蓄地教会你避免哪些(以及为什么要避免)。

同意。很多开发人员讨论用干净的石板来编写软件。但我想几乎所有开发人员的某些时候是在吃其他开发人员的狗食。– Bernard Dy

13、《编码:隐匿在计算机软硬件背后的语言》

我推荐CharlesPetzold的《编码》。在这个充满工具和IDE的年代,很多复杂度已经从程序员那“抽取”走了,这本书一本开眼之作。 –hemil

14、《程序员健康指南》

‘伍’ 作为程序员计算机基础的书推荐几本呗

生活不仅仅只有写代码,作为程序员,我们不仅要将数据结构、计昌敬让算机网络、操作系统这三把斧玩好,更要拥有一个强健的体魄!

网络:

万物互稿山联时代,如果你还不懂网络知识,那将寸步难行。这里推荐三本经典书籍:

TCP/IP详解

该书是网络专家、着名技术作家W.RichardStevens的传世之作,内容详尽且极具权威,被誉为TCP/IP领域的不朽名着,就我认识的老通信行业的专业开发人员,基本人手一本。本书共三卷,其中卷一偏重于基础原理,卷二、卷三更多偏重于编程细节,作为基础书籍推荐,卷一即可,对于学有余力的童鞋,可学习二、三卷。

图解HTTP

应用最广泛的协议之一,前端工程师分析抓包分析数据,后端工程师实现RESTAPI、搭建自己的HTTP服务器等过程中都绕不开HTTP这一知识点,《图解HTTP》,用通俗易懂的语言讲解了HTTP协议的方方面面,本书列举诸多常见通信场景及实战案例,最后延伸到Web安全、最新技术动向等方面,实在是一本不可多得的好书。

Wireshark网络分析就这么简单

“授人以鱼不如授人以渔”,全书以诙谐幽默的写法为我们讲解了枯燥的技术问题,由浅入深的用Wireshark分析了常见的网络协议,还通过身边的真实案例分享了Wireshark使用技巧,对初学者是很好的启蒙书籍。本书可搭配前面介绍的两本基础理论书籍一起学习,必能达到事半功倍的效果。

操作系统:

现代操作系统

程序员的耐局自我修养——链接、装载和库

如果你是高手,LinuxHacker或者geek,请绕行

但如果你是新手

如果你曾好奇过windows系统目录下和软件目录下大堆大堆的dll文件是什么?

如果你曾疑惑过我写下的代码经历的怎样的历程最后怎样到达了内存?

编译器每天用,它到底做了什么?

如果你已经学习或接触了C,汇编,计算机结构,但还是没办法把三者的关系理顺。

那么,《程序员的自我修养——链接、装载和库》这本书绝对是对你的有帮助。

数据结构

基础入门的话,这里推荐《大话数据结构》。本书以一名教师的教学为场景,用生动形象的语言讲解数据结构和相关算法的知识。全文大量引用了各种各样的生活知识来类比数据结构中的专业知识。

程序员必备书籍

重要!

重要!

重要!

作为本文的压轴戏,也是最重要的一本书《程序员健康指南》推荐给各位程序猿友们,专门为程序员量身制作的健康指南,针对头痛、眼部疲劳、背部疼痛和手腕疼痛等常见的问题介绍了其成因和对策。身体是革命的本钱,各位在长期面对996的同时,一定要注意身体,加强锻炼,提高免疫力!

阅读全文

与专治程序员开工指南相关的资料

热点内容
校验算法的缺点是什么 浏览:717
PHP商品分类功能实现 浏览:328
php取字符串中间 浏览:428
程序员经常用工具 浏览:835
降服主力指标源码主图 浏览:500
python实用库 浏览:692
电脑默认7个文件夹 浏览:11
新唐单片机安装c51后编译错误 浏览:530
红包源码引流神器 浏览:235
学生初中毕业撕书解压 浏览:747
命令方块刷铜点教学 浏览:690
php邮件订阅系统 浏览:997
柱梁底加密箍间距 浏览:30
pythonjavascript对比 浏览:741
什么动漫app是大陆字幕 浏览:286
android查看activity栈 浏览:918
x86固件编译 浏览:166
安卓下什么可以看微博动图 浏览:412
永辉生活app注册有什么优惠吗 浏览:411
行偏移算法 浏览:241