git操作一般分为三个阶段:图片工作目录文件系统中实际文件的状态,可以跟踪或取消跟踪,可以更改或删除。...暂存区或索引我们根据其更改为新版本准备一组文件的区域HEAD它是当前分支中的指针,它具有完整的存储库历史记录每个阶段的命令如下:工作目录git 命令 描述...git stash -U [stash] 存储更改添加未跟踪的文件 git log --since="1 weeks...使用在 INDEX 上添加的更改创建提交 git commit -am 'comment...'...将当前分支与另一个指定分支合并 git merge {branch} --squash 将当前分支与另一个指定分支合并
轻量标签: 很像一个不会改变的分支 - 它只是一个特定提交的引用。它本质上是将提交校验和存储到一个文件中 - 没有保存任何其他信息。 附注标签是存储在 Git 数据库中的一个完整对象。...cherry-pick: 用于将在其他分支上的 commit 修改,移植到当前的分支(HEAD), -x 参数,表示保留原提交的作者信息进行提交。...储藏与清理 当你在项目的一部分上已经工作一段时间后,所有东西都进入了混乱的状态,而这时你想要切换到另一个分支做一点别的事情。 问题是,你不想仅仅因为过会儿回到这一点而为做了一半的工作创建一次提交。...这样每个提交只包含相关的更改。 git stash -p # 默认情况下,当存储时,不包括未跟踪的文件。 为了更改该行为并包含这些文件,您需要使用-u参数。...还有-a(-all)可以完全存储未跟踪和忽略的文件,这可能是您通常不需要的东西。
# 删除本地分支,会阻止删除包含未合并更改的分支 $ git brnach -d branchname # 强制删除一个本地分支,即使包含未合并更改的分支 $ git branch -D branchname...# 将所有未提交的修改(提交到暂存区)保存至堆栈中 $ git stash # 给本次存储加个备注,以防时间久了忘了 $ git stash save "存储" # 存储未追踪的文件 $ git stash...切换到某一次提交后,你可以查看文件,编译项目,运行测试,甚至编辑文件而不需要考虑是否会影响项目的当前状态,你所做的一切都不会被保存到主栈的仓库中。...它是在提交记录最后面加上一个撤销了更改的新提交,而不是从项目历史中移除这个提交,这避免了 Git 丢失项目历史。 「撤销(revert)应该用在你想要在项目历史中移除某个提交的时候」。...因为两个命令的目的不同,它们的实现也不一样:重设完全地移除了一堆更改,而撤销保留了原来的更改,用一个新的提交来实现撤销。
请注意,某些存储库可能会使用 master而不是 main: git merge upstream/main 将您的本地分支提交推送或传输到远程存储库分支: git push origin main...从跟踪远程分支获取并合并任何提交: git pull 检查 显示当前活动分支的提交历史: git log 显示更改特定文件的提交。...无论文件重命名如何,这都遵循文件: git log --follow my_script.py 显示在一个分支上而不是在另一个分支上的提交。...变基 rebase 允许我们通过更改分支所基于的提交来移动分支。通过变基,您可以压缩或改写提交。...请注意,某些存储库可能会使用 master而不是 main: git rebase upstream/main 恢复和重置 您可以使用 来恢复对给定提交所做的更改 revert。
git rm -f 您想要从git存储库中删除文件,而不是从文件系统中删除文件,然后您可以运行此命令。...#checkout 您想切换到分支。然后您可以运行以下命令。 git checkout 如果您已在当前分支中更改了某个文件,请确保stash更改或commit更改。。...Head只是对当前分支上当前提交(最新)的引用。通常,git中的head可以指向分支或提交。当Head指向分支时,git不会抱怨。...git revert --no-commit #cherry-pick 您正在分支工作,并且您需要从另一个分支进行提交(例如,错误修复提交)以在您当前的分支中工作...然后,您可以使用cherry-pick命令在当前分支中获取该提交。如果您在错误的分支中提交并希望在另一个分支中提交,这也很有帮助。 首先,您必须切换到具有提交的分支。
一、分支合并策略 在Git中,高级分支策略是为了有效地管理和整合分支而设计的。其中一个关键方面是分支合并策略,它定义了如何将一个分支的更改合并到另一个分支。...通过 rebase,你可以将某个分支上的所有提交应用到另一个分支的顶部,以使分支看起来像是在一系列连续的提交中进行的更改,而不是合并提交的历史。...三、Cherry-pick操作 cherry-pick 操作是Git中的一项高级分支策略,用于选择并应用单个提交到当前分支,而不是像合并或rebase一样整体合并分支。...这使你可以选择性地将某些提交应用到你的分支上,而不必合并整个分支的更改。...这使得你可以更精细地控制代码的集成,但需要小心谨慎地使用,以确保所选择的提交适合当前分支的上下文。 四、总结 分支合并策略是Git中的关键概念,它定义了如何将一个分支的更改合并到另一个分支。
Git 仓库目录(.git directory):Git 仓库目录就是真正存储和管理代码库的目录。提交修改到代码库本质上就是将暂存区的修改提交(commit)到代码库中。...;保存到暂存区的修改也可以被撤销,而不会影响到现有的版本库和提交历史。...暂存区另一个作用是在进行多分支工作时,我们常常在某一分支上进行了修改,但又不想提交到代码库中,这时候我们可以使用 git stash 命令将暂存的和未暂存的修改保存到一个缓冲栈里,使得当前工作分支恢复到干净的状态...虽然上图显示出来红色的分支是 remote 分支,但它们本质上还是存储于本地的分支,只是这些分支是指向对应的远端分支。后面会再详细说明该类分支。...无修改时执行 git status 操作 当我们对当前分支进行了更改时,git status 会根据被修改文件的状态显示不同的信息,如图 32 所示: 红色框的修改表明这些修改已经提交到了暂存区。
团队中的每个人都可以在自己的本地机器上保留正在开发的存储库的完整备份。然后,多亏了BitBucket、GitHub或GitLab这样的外部服务器,他们可以安全地将存储库存储在一个地方。...git add fil* 如何在Git中检查存储库的状态: 该命令将显示当前存储库的状态,包括暂存、未暂存和未跟踪的文件。...git log --stat 如何在Git中使用diff查看在提交之前所做的更改: 您可以将文件作为参数传递,这样就只查看特定文件上的更改。 默认情况下,git diff只显示未暂存的更改。...git remote show origin 如何在Git中推送更改到远程repo: 当你的所有工作都准备好保存到远程存储库时,你可以使用下面的命令推送所有更改: git push 如何从Git的远程repo...中获取更改: 如果其他团队成员正在处理您的存储库,您可以使用以下命令检索对远程存储库所做的最新更改: git pull 如何检查Git跟踪的远程分支: 这个命令显示了Git正在跟踪当前存储库的所有远程分支的名称
Git 仓库目录(.git directory):Git 仓库目录就是真正存储和管理代码库的目录。提交修改到代码库本质上就是将暂存区的修改提交(commit)到代码库中。...;保存到暂存区的修改也可以被撤销,而不会影响到现有的版本库和提交历史。...暂存区另一个作用是在进行多分支工作时,我们常常在某一分支上进行了修改,但又不想提交到代码库中,这时候我们可以使用 git stash 命令将暂存的和未暂存的修改保存到一个缓冲栈里,使得当前工作分支恢复到干净的状态...虽然上图显示出来红色的分支是 remote 分支,但它们本质上还是存储于本地的分支,只是这些分支是指向对应的远端分支。后面会再详细说明该类分支。...image.png 点击查看大图 当我们对当前分支进行了更改时,git status 会根据被修改文件的状态显示不同的信息,如图 32 所示: 红色框的修改表明这些修改已经提交到了暂存区。
HEAD^ # 查看d921970的祖父提交 $ git show d921970~2 (3)提交区间 # 在develop分支中而不在master分支中的提交 $ git log master..develop...# 在master分支中而不在develop分支中的提交 $ git log develop..master # 在你当前分支中而不在远程 origin 中的提交 $ git log origin/master...# 重新应用储藏 $ git stash apply stash@{2} 注意: 可以在一个分支上保存一个储藏,切换到另一个分支,然后尝试重新应用这些修改 当应用储藏时工作目录中也可以有修改与未提交的文件...HEAD:HEAD是当前分支引用的指针,它总是指向该分支上的最后一次提交。...在项目中使用子模块的最简模型,就是只使用子项目并不时地获取更新,而并不在你的检出中进行任何更改。
.git/objects/目录下的文件是硬链接的,以便在可能的情况下节省空间。 如果将存储库指定为本地路径(例如,/path/to/repo),则这是默认值,而–local 本质上是无操作。...如果使用此选项克隆存储库,然后在源存储库中删除分支(或使用任何其他提交未引用的 Git 命令),则某些对象可能会变为未引用(或悬空)。...git pull 使用此命令来合并来自另一个存储库的更改,并且可以手动使用此命令将更改从一个分支合并到另一个分支。...分支上的更改,因为它从master(即E)转移到master之上的当前提交(C),并记录导致新提交以及两个父提交的名称和来自用户的描述更改的日志消息。...这允许您在当前分支之上创建单个提交,其效果与合并另一个分支(或章鱼的情况下更多)相同。 使用–no-squash 执行合并并提交结果。此选项可用于覆盖–squash。
在切换到新分支之前,您将保留在当前活动的分支上。 git branch new-branch 切换到任何现有分支并将其签出到当前工作目录中。...git pull 检查 显示当前活动分支的提交历史记录。 git log 显示更改特定文件的提交。无论文件重命名如何,都会跟随文件。...git log --follow my_script.py 显示一个分支上的提交,而不显示另一个分支上的提交。这将显示在a-branch上而非b-branch上提交。...git reflog 通过其提交字符串或哈希以更易于阅读的格式显示Git中的任何对象。 git show de754f5 显示更改 该git diff命令显示提交,分支等之间的更改。...比较暂存区域中的已修改文件。 git diff --staged 显示在a-branch但不在b-branch上内容的差异。
需要说明的是,Git存储库是存储所有项目文件和相关元数据的目录。Git通过根据索引创建树形图来记录项目的当前状态,并且通常采用有向无环图(DAG)的形式。...C1是初始提交,即第一个更改的快照,并使用名为C2的更改从中创建另一个快照。请注意,主服务器指向最新提交。 现在,当我再次提交时,将创建另一个快照C3,现在主快照指向C3,而不是C2。...因此,它不会每次都盲目复制整个目录;它包括作为一组commit的提交,或一个版本的“增量”。简单来说,它仅复制在存储库中所做的更改。...是时候使用push命令在中央存储库中进行更改了 Push 此命令将从本地存储库提取到远程存储库。它与pull操作相反。 拉入导入将提交到本地存储库,而拉入导出将提交到远程存储库。.../my-git-repo 隐藏未提交的更改git status git stash git status 当您要重新应用“stash”ed的更改时,请使用以下命令: git stash apply 就是这样
它会告诉我当前所在的分支,以及仓库是否有未提交的更改,也就是所谓的“脏”状态: 当有人请我帮忙处理一些git相关的事情时,如果我发现他们的命令行提示符中没有git信息,我通常会首先建议他们添加这部分内容...使用git add -p选择我稍后想在这个分支(比如分支A)上提交的内容,然后git stash这些更改,切换到另一个从主分支分出的新分支B,在那里提交,然后推送。...使用git add -p并git commit我想要保留在当前分支上的更改,然后将其他想要放在另一个分支上的更改git stash起来,切换到目标分支,git stash pop并提交。...使用git add -p并git commit -m “WIP”我想要保留在当前分支上的更改,然后将其他想要在另一个分支上的更改git stash起来,切换到目标分支,提交这些更改。...我如何选择一种策略而不是另一种?这取决于我想要在另一个分支上做的更改的规模,以及我工作目录中未提交的内容有多少。 我对分支名称不太挑剔,只要它们有点意义就行。
blob object 未输入的对象,例如文件的内容。 branch “分支”是一个积极的发展路线。分支上最近的提交被称为该分支的提示。...merge 作为动词:将另一个分支(可能来自外部存储库)的内容带入当前分支。在合并分支来自不同存储库的情况下,这通过首先获取远程分支然后将结果合并到当前分支来完成。...要与遥控器通信,请参阅获取或按。 remote-tracking branch ref ,用于跟踪来自另一个存储库的更改。.....stable 将显示在稳定分支上但不在主分支上进行的提交列表。...首先,如果您希望继续发布在最近版本之前发布的功能版本的维护修补程序,那么您必须创建另一个分支来跟踪该先前版本的提交。 为此,将当前维护分支复制到以先前版本号命名的另一个分支(例如,maint-X.Y。
但是由于每次提交最新版本的动作是原子的,而我们会在每次小更改后就保存到版本库。如果这样每次一个小的修改都作为新的版本加入到版本库的话,则会造成许多无用的日志信息。因此引入了一个中间状态,就是暂存区。...status:查看仓库状态,会显示工作区里以修改未加入暂存区的文件或加入暂存区未commit的文件 git diff :查看当前工作区的文件相对于之前提交到暂存区又修改了哪些内容...rebase意为变基,首先找到dev1和dev2分支最近共同祖先节点,然后先将其中一条dev1的版本节点缓存到一个目录下,然后把dev1在共同节点之后的提交版本放到dev2分支上,最后将dev2的提交放在后面...merge操作会生成一个新的节点,之前提交分开显示。而rebase操作不会生成新的节点,是将两个分支融合成一个线性的操作。...而当前修改还不是很完整,所以不想将当前所有修改commit,你可以将修改到一半时的工作区和暂存区的所有内容存到栈里,所有操作只与本地有关。
,那么上面图片中的每个节点都可以看作一个版本,分支就是在项目的当前状态上创建了一个完全一样的“副本”,这个副本可以独立进行修改,而不影响其他分支或主分支。...当完成了在分支上的开发工作并测试通过后,可以将这个分支合并回主分支,以将新的功能或修复应用到整个项目中。Git提供了合并分支的功能,它会将分支上所做的更改整合到主分支上。...需要注意的是,未提交的修改不会随着分支的切换而消失。即使切换分支,那些修改仍然存在于工作目录中,只是这些修改可能与当前分支的代码出现冲突。...然后可以切换到新的分支上进行开发或修改。 看看main分支的log 这里就可以看到,main分支的提交历史并没有发生任何变化; 那么如何将那个孤立的提交给放到main分支里面做第四版呢?...而 git checkout 则具有更多的功能,可以用于切换分支、创建新分支、恢复文件等。 引起修改的情况不同: 在某些情况下,使用 git checkout 可能会导致未提交的更改被覆盖或丢失。
还有一个中央云存储库,开发人员可以向其提交更改,并与其他团队成员进行共享,如图所示,所 有协作者都在提交更改“远程存储库”。 2.Git 工作流程 本章节我们将为大家介绍 Git 的工作流程。...在克隆的资源上添加或修改文件。 如果其他人修改了,你可以更新资源。 在提交前查看修改。 提交修改。 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。...git pull 命令从中央存储库中提取特定分支的新更改或提交,并更新本地存储库中的目标分支。 git fetch 也用于相同的目的,但它的工作方式略有不同。...要获取特定提交中已更改的列表文件,请使用以下命令: git diff-tree -r {hash} 给定提交哈希,这将列出在该提交中更改或添加的所有文件。...这个命令也是极具危险性的,因为不但 会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
在克隆的资源上添加或修改文件。如果其他人修改了,你可以更新资源。在提交前查看修改。提交修改。在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。...git pull 命令从中央存储库中提取特定分支的新更改或提交,并更新本地存储库中的目标分支。git fetch 也用于相同的目的,但它的工作方式略有不同。...当你执行 git fetch 时,它会从所需的分支中提取所有新提交,并将其存储在本地存储库中的新分支中。如果要在目标分支中反映这些更改,必须在 git fetch 之后执行git merge。...要获取特定提交中已更改的列表文件,请使用以下命令:git diff-tree -r {hash}给定提交哈希,这将列出在该提交中更改或添加的所有文件。...这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
,然后保存到暂存区; 提交更新,将保存在暂存区域的文件快照永久转储到git目录中; 状态相关命令 git status 显示哪些文件已修改、哪些文件已暂存、未提交; git diff 比较不同状态的文件...默认比较工作目录、暂存区文件快照的差异;(修改后,未暂存的文件) –cached 比较已暂存、上次提交时的快照之间的差异; git reset 进行撤销操作,将当前分支重设到指定的commit –hard...保存着一个名为HEAD的特保指针; HEAD是一个指向你正在工作中的本地分支的指针; 通过git branch -a 查看分支时,会看到所有分支,包括本地分支、远程分支; ?...,这三个命令的意思分别是“继续”、“退出”和“跳过” 一定要注意的地方: 一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行衍合操作; 在进行衍合的时候,实际上抛弃了一些现存的提交对象而创造了一些类似但不同的新的提交对象...; 如果你把原来分支中的提交对象发布出去,并且其他人更新下载后在其基础上开展工作,而稍后你又用git rebase 抛弃这些提交对象,把新的重演后的提交对象发布出去的话,你的合作者就不得不重新合并他们的工作
领取专属 10元无门槛券
手把手带您无忧上云