本篇文章,我们将尝试探索如何更有效的管理您的时间以及如何充分使用Git提供的各种功能。...你有如下几个选项: 输入y来缓存该块 输入n不缓存该块 输入e来人工编辑该块 输入d来退出或进入下一个文件 输入s来分割这个块 对我们而言,我们肯定希望把它分成几个部分,有选择的添加一部分而忽略其他的。...正如你所看到的,我们添加了第一行和第三行而忽略了第二行。你可以在之后查看仓库状态 并提交。 ?...git stash apply stash@{2} 9.检查丢失的提交 尽管reflog是一种查看丢失提交的方法,但是它在大型仓库中行不通。...如果你在一个分支中解决了它,你可以使用cherry-pick来把这次提交合并进其他的分支而不会搞乱其他的文件或是提交。 让我们想象一个可以使用该命令的场景。
虽然它可以解决版本丢失和覆盖的问题,但是它最大的问题就是只能在本地使用,不能协同工作,而且如果本地数据库数据损坏或丢失,那么对应的历次变更记录也就完全丢失了。 ?...暂存区域就是新修改或新添加的文件暂时存储的空间,这个区域的文件等待被提交保存到本地仓库。下面的图展示了它们三者之间的本地转换关系。 ? git是如何存储我们的操作记录和文件的呢?...#撤销当前所有修改 3.commit后撤销 git reset --soft HEAD^ #撤销commit回到前一个版本,不撤销git add,不恢复变更 git reset --soft HEAD...~1 #撤销commit回到前一个版本,不撤销git add,不恢复变更 git reset --soft HEAD~2 #撤销commit回到前两个版本,不撤销git add,不恢复变更 git...reset --mixed HEAD^ #撤销commit回到前一个版本,并撤销git add,不恢复变更 git reset --hard HEAD^ #撤销commit回到前一个版本,撤销git
这种方式如果回退版本的时候Test1有修改内容,那么回退的时候会弹窗让你选择Test1修改没提交的内容如何处理,类似于解决冲突。...) Keep 回退:当你希望恢复到某个提交的版本,但又不丢失本地修改时使用(恢复版本的文件的本地内容需要手动选择要还是丢,麻烦不推荐) 1.4、强制推送远程仓库 回退后本地仓库版本低于远程,需执行强制推送...在强制推送远程仓库前,都可以通过更新代码恢复上面的版本回退 方式一(不推荐) git push --force 是强制推送命令,它会将本地分支的内容强行推送到远程仓库,覆盖远程分支的历史记录。...使用此命令时,如果远程分支的提交历史与本地分支不同,推送操作仍会进行,并且不会进行任何检查,可能会丢失远程仓库中的更改。因此,这个命令需要小心使用,尤其在多人协作的情况下,可能会覆盖他人的更改。...1、IDEA图形化操作 1.1、撤销目标提交 仅仅撤销本次提交历史的内容,如果此版本后面又添加了b,此次撤销就需要解决冲突了。
注意: 没事千万不要手动修改这个目录里面的文件,不然就把会git仓库给破坏了。 2、添加文件到git仓库 把文件添加到仓库: git add git add ....3、把文件提交到本地仓库 git commit -m "代码提交信息" 注意: git commit命令,一般会在后面加上-m表示本次提交到本地仓库的记录。...它们都用来撤销代码仓库中的某些更改,而前两个命令不仅可以作用于提交,还可以作用于特定文件。 因为它们非常相似,所以我们经常会搞混,不知道什么场景下该用哪个命令。...这避免了git丢失项目历史记录,这一点对于你的版本历史和协作的可靠性来说是很重要的。 比如,下面的命令会找出倒数第二个提交,然后创建一个新的提交来撤销这些更改,然后把这个提交加入项目中。...git只需要将当前分支顶端(快速向前地)移动到目标分支顶端,即可整合两个分支的历史,而不需要“真正”合并分支。它在效果上合并了历史,因为目标分支上的提交现在在当前分支可以访问到。
从上图可以看出,最近一次提交相对于前一次提交,增加了一行内容主分支master第一次编写内容,且显示第一次提交是新建的文件。...可以在后面在再添加一行内容:主分支master第二次编写内容。然后将它添加到暂存区中,然后再次修改README.md文件,添加一行内容:主分支master第三次编写内容。...那么我们对工作树中的README.md文件进行修改,不添加到暂存区也不提交,然后在尝试进行查看。 ?...我们修改了工作树中的文件,而没有添加到暂存区,所以使用git diff HEAD和git diff命令都是指向了工作树与最新提交的差别。...属于“快进方式”,不过这种情况如果删除分支,则会丢失分支信息。因为在这个过程中没有创建commit。
然而,git reflog是一个被指向提交的列表。记住:这是你系统的局部,不是源的部分,不包含推送的和合并的。 如果执行 git log,我获取的提交信息是源的一部分。...07 压缩多次提交 当你提交你的代码是为了查看和创建一个新的推送请求(在开源项目中经常出现),在接受前,你可以要求改变的你的代码。你做出改变,仅仅是要求改变它以便下次查看。...在你知道前,你可以做一些额外的提交。理想地,你可以使用 rabase 指令压缩它们。 如果你想压缩上面两次的提交,你要执行的指令在下面。...为了保存这些变化,你需要运行以下命令: 为了核对保存的列表,你需要执行下面的命令: 如果你想不保存和恢复未提交的变化,你可以应用下面的保存: 在最后一个截图中,你可以看到每次保存都有个标识符,一个唯一的数字...如果你想只选择有选择性的保存,你可以添加特殊的标识符到 apply 命令中。 09 核对丢失的提交信息 尽管 reflog 是核对上次丢失的提交信息的一种方法,但在大量的源中,不是可行的。
检查 Git 存储库的状态,包括添加的未暂存的文件和暂存的文件: git status 要暂存修改后的文件,请使用该 add命令,您可以在提交前多次运行该命令。...请注意,某些存储库可能会使用 master而不是 main: git merge upstream/main 将您的本地分支提交推送或传输到远程存储库分支: git push origin main...无论文件重命名如何,这都遵循文件: git log --follow my_script.py 显示在一个分支上而不是在另一个分支上的提交。...您还没有准备好提交到目前为止所做的更改,但您不想丢失您的工作。该 git stash命令将允许您保存本地修改并恢复到与最近 HEAD提交一致的工作目录。...您可以通过调用您想要变基的提交数量来启动变基(5在下面的情况下): git rebase -i HEAD~5 或者,您可以根据特定的提交字符串或哈希值进行变基: git rebase -i 074a4e5
这个命令可以将文件中的每一行的作者、最新的变更提交和提交时间展示出来。 git blame [file_name] ? 在下面的截图中你可以看到命令是如何在更大的目录中搜寻。 ? 4....而git reflog则列出了head曾经指向过的一系列commit。要明白它们只存在于你本机中;而不是你的版本仓库的一部分,也不包含在push和merge操作中。...正如你所看到的,我们添加了第一行和第三行而忽略了第二行。之后你可以查看仓库状态之后并进行提交。 ? 7....9.检查丢失的提交 尽管 reflog 是唯一检查丢失提交的方式。但它不是适应用于大型的仓库。那就是 fsck(文件系统检测)命令登场的时候了。 git fsck --lost-found ?...如果你在一个分支中解决了它,你可以使用cherry-pick命令把它commit到其它分支上去,而不会弄乱其他的文件或commit。 让我们来设想一个用得着它的场景。
git revert 命令只能抵消上一个提交,如果想抵消多个提交,必须在命令行依次指定这些提交。比如,抵消前两个提交,要像下面这样写。...--no-commit:只抵消暂存区和工作区的文件变化,不产生新的提交。...二、丢弃提交 如果希望以前的提交在历史中彻底消失,而不是被抵消掉,可以使用git reset命令,丢弃掉某个提交之后的所有提交。...五、从暂存区撤销文件 如果不小心把一个文件添加到暂存区,可以用下面的命令撤销。 $ git rm --cached [filename] 上面的命令不影响已经提交的内容。...[当前分支此前的最后一次提交] # 切换到 feature 分支 $ git checkout feature 上面的操作等于是撤销当前分支的变化,将这些变化放到一个新建的分支。
而GitHub作为一个开源社区平台,它可以充当那个服务器。但是由于它是开源的,所以一般公司内部项目也是不建议利用GitHub作为公共服务器来进行开发的。...因为以后我们在多人协作的时候,每次Git在提交的时候会署名当前提交者,而Git是如何得知提交者的信息的?就是在初始化信息的时候我们告诉它的。...至于里面的内容结构我们在后续的文章中介绍。 ? 从此,在f:/single目录下为工作区,在这个目录下的文件都是可以被git追踪的。...而当我们add保存该文件修改之后: ? 这次,git告诉我们本次提交已经成功添加到master分支上了,相比于上次commit状态有一个文件的修改。...但是这里需要注意的是,reset命令的执行将会直接导致工作区,暂存区,本地分支完全一致,也就是工作树是干净的,所以回退前要慎重检查是否有内容尚未保存,否则将会导致全部丢失。
min.c 然后使用status查看一下 如果不是中文会在后面写一个Untracked代表未提交 我们使用git add提交到缓存区文件后,使用git status也可以查看到当前文件的状态 对应的英文是...下面这个演示,我将min.c文件修改了,并使用git checkout — file回到了之前修改的状态 注意这个功能不能一直迭代恢复,如你恢复到了修改前的版本,你想再次回滚回滚到修改前在之前的版本是不行的...的文件 然后在使用git checkout master切换到master 在使用git merge dev将其合并 这里需要说一点,如果你在任何分支下创建文件,没有提交到仓库,那么它在所有仓库都是可见的...git会终止你这样操作,为的是防止丢失当前工作区内容。...如果您只是因为需要干净的工作副本(来签出分支,进行更改等)而打算提交,请考虑改用Git的“隐藏”功能。 提交之前的测试代码 抵制诱惑,以完成您“认为”的事情。
,第一种是远程已经有的分支,需要把它在本地也同样创建一份;还有一种是新建一个远端和本地都不存在的分支。...普通删除相对来说比较安全,避免造成数据丢失的情况 强制删除 git branch -D 分支名 在极少数情况下你可能会遇到普通删除无法将分支删除的情况,强制删除命令执行完毕之后,使用 git log...命令才能显示 # 显示分支操作记录 git reflog show # 复制操作前的 commit id git checkout -b 分支名称 [commit id] 回滚 reset 操作 如果你不小心使用...代码冲突 可以看到冲突符号以 面的是当前 test 的,下面的是 develop 分支的,最后以 >>>>>> 为结束符 解决冲突后这里提交版本的方式稍微有一些区别...,而且不需要 -m 参数 git merge 命令合并代码之后,版本记录会按照时间顺序排序,并自动产生一个 Merge branch 的版本; git rebase 命令合并代码之后,版本记录会将目标分支的版本放在后面
master, origin/my-feature # 放弃某个文件的所有本地修改 $ git checkout HEAD 删除添加.gitignore文件前错误提交的文件: git rm...最好是创建和推(push)一个新的提交(commit),而不是强推一个修正后的提交。后者会使那些与该分支或该分支的子分支工作的开发者,在源历史中产生冲突。...暂存(Staging) 我需要把暂存的内容添加到上一次的提交(commit) (my-branch*)$ git commit --amend 我想要暂存一个新文件的一部分,而不是这个文件的全部 一般来说...例如, 如果你想 单独保留最旧(first)的提交(commit),组合所有剩下的到第二个里面, 你就应该编辑第二个提交(commit)后面的每个提交(commit) 前的单词为 f: pick a9c8a1d...(commit), 和分支之间不共享的提交(commit)的列表。
master, origin/my-feature # 放弃某个文件的所有本地修改 $ git checkout HEAD 删除添加.gitignore文件前错误提交的文件: $ git...最好是创建和推(push)一个新的提交(commit),而不是强推一个修正后的提交。后者会使那些与该分支或该分支的子分支工作的开发者,在源历史中产生冲突。...暂存(Staging) 我需要把暂存的内容添加到上一次的提交(commit) (my-branch*)$ git commit --amend 我想要暂存一个新文件的一部分,而不是这个文件的全部 一般来说...例如, 如果你想 单独保留最旧(first)的提交(commit),组合所有剩下的到第二个里面, 你就应该编辑第二个提交(commit)后面的每个提交(commit) 前的单词为 f: pick a9c8a1d...(commit), 和分支之间不共享的提交(commit)的列表。
在这个新的分支上,可以随意修改代码、添加新的功能、调试和测试,而不会对主分支上的代码产生任何影响。这个分支与主分支相互独立,可以将其看作是一个完整的项目副本。...然后可以切换到新的分支上进行开发或修改。 看看main分支的log 这里就可以看到,main分支的提交历史并没有发生任何变化; 那么如何将那个孤立的提交给放到main分支里面做第四版呢?...,然后将新分支合并到旧分支中(具体操作在后面的分支去记录); 其次是我们checkout回旧版本后,修改了不要提交,而是将修改暂存,然后切换回旧分支,拉回修改进行合并; 演示第二个合并的方案 首先切换到第二版本的分支...,由于两个地方都有修改,但是git不知道保留哪个,所以报错,可以看到现在文件里面的内容如下: 需要自行进行编辑选择;这里我们不选择,直接上传,提交; 如上,我们就完成了一个版本的切换;...这意味着未添加到索引的更改不会丢失。 如果工作目录存在与 不一致的部分,那么这些更改将会被保留,但会被标记为未暂存的更改。
我们演示了如何在日常的工作流程中通过使用-a 标志来跳过 git add 这一步,及如何使用 -m 标志通过命令行而不启动一个编辑器来传递提交信息。...如果错误地为这个命令附加后面的参数,你可能会丢失你的工作,所以在使用前你要确定你已经完全理解了它。...我们在 派生的公开项目 的后面介绍了如何做一个 squashed merge (指Git 合并时将其当作一个新的提交而不是记录你合并时的分支的历史记录。)...在 签署提交 一节中我们学习了如何在合并前验证签名,如果你项目正在使用 GPG 签名的话。 最后,我们在 子树合并 一节中学习了子树合并。...从一个分支单独一个或者两个提交而不是合并整个分支的所有变更是非常有用的。
git revert 查看某次提交修改内容git show 查看某个分支的版本号git rev-parse 找回丢失对象的最后一点希望git fsck 本地分支 分支概念 创建其他分支的原因 一个最简单实用的分支管理策略...tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件 git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...---- 5.让Git不Tracked特定文件【.gitignore文件配置】 将未tracked的文件添加到缓存区后,Git就会开始跟踪这个文件了!...git diff --stage # 工作区文件与上次提交的差异(1.6 版本前用 --cached) git diff 版本TAG # 查看从某个版本后都改动内容 git diff 分支A 分支B...,处理下一个补丁,不建议使用,补丁部分的commit会丢失!
如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。要是中央服务器的磁盘发生故障,碰巧没做备份,或者备份不够及时,就会有丢失数据的风险。...当然,生成的文档允许手动修改,所以发布前,你还可以添加其他内容。 conventional-changelog 就是生成 Change log 的工具,运行下面的命令即可。...:这个文件里配置的文件或目录,会自动被 git 所忽略,不纳入版本控制。...常用的客户端钩子: pre-commit 钩子:在提交信息前运行。 它用于检查即将提交的快照,例如,检查是否有所遗漏,确保测试运行,以及核查代码。...如果修复后没有问题,就 git add 添加修改后的文件;如果修复失败,则拒绝提交代码。
通常这是因为你强制删除了正在工作的分支,但是最后却发现你还需要这个分支;亦或者硬重置了一个分支,放弃了你想要的提交。 如果这些事情已经发生,该如何找回你的提交呢?...下面的例子将硬重置你的测试仓库中的 master 分支到一个旧的提交,以此来恢复丢失的提交。...Chacon Date: Fri May 22 18:15:24 2009 -0700 modified repo.rb a bit 看起来下面的那个就是你丢失的提交...master 分支曾经指向的地方,再一次使得前两次提交可到达了。...现在你可以用和之前相同的方法恢复这个提交,也就是添加一个指向这个提交的分支。
领取专属 10元无门槛券
手把手带您无忧上云