网站开发中为什么有两个控制层,网站上的图文介绍怎么做,保定网站建设哪家好,seo招聘职责git笔记之撤销、回退、reset方面的笔记
code review! 文章目录 git笔记之撤销、回退、reset方面的笔记1.git 已经commit了#xff0c;还没push#xff0c;如何撤销到初始状态git reset --soft HEAD~1git reset HEAD~1#xff08;等同于 git reset --mixed HEAD~1#xff0…git笔记之撤销、回退、reset方面的笔记
code review! 文章目录 git笔记之撤销、回退、reset方面的笔记1.git 已经commit了还没push如何撤销到初始状态git reset --soft HEAD~1git reset HEAD~1等同于 git reset --mixed HEAD~1git reset --hard HEAD~1 2.git 已经commit了还没push修改最后的commit信息3.git 已经commit了,也push了发现远程没合发现还有没改完如何操作3.1. 在本地进行修改3.2. 添加并提交修改3.3. 推送到远程仓库--force-with-lease 详解 3.4. 如果有必要打开一个新的合并请求Merge Request或拉取请求Pull Request 4.使本地与远程保持一致重置本地分支到远程分支的状态更新本地分支列表对于所有本地分支跟踪远程分支 5.git stash的作用 1.git 已经commit了还没push如何撤销到初始状态
git reset 是 Git 中的一个强大命令用于撤销本地的提交。git reset 可以通过不同的参数来指定撤销的方式比如 --soft--mixed默认以及 --hard。下面是每个参数的详解以及一个比较表格。
git reset --soft HEAD~1
--soft 参数将 HEAD 移动到指定的提交但不会改变索引暂存区和工作目录。换句话说它撤销了最近的提交但保留了文件的更改并且这些更改已经在暂存区准备好了下一个提交。适用场景当你想要撤销提交但保留更改并立即进行新的提交时。将当前分支的HEAD移动到前一个提交即撤销最后一次提交但不更改暂存区index和工作目录。撤销后所有的更改都会被保留在暂存区中就好像你刚刚执行了git add将它们暂存起来一样。这个命令适合于当你想要修改最后的提交信息或者合并多个提交到一个提交的场景。
git reset HEAD~1等同于 git reset --mixed HEAD~1
--mixed 是默认的重置模式。这个参数会将 HEAD 移动到指定的提交并且重置索引但不会触及工作目录的文件。撤销了最近的提交并将那次提交的所有更改放回工作目录。就像你完成了修改但还没有执行 git add 的状态。适用场景当你想要撤销提交并重新审查或修改更改但不想完全放弃这些更改时。
git reset --hard HEAD~1
--hard 参数将 HEAD、索引和工作目录全都重置到指定的提交。这意味着所有的更改——包括已经暂存的和未暂存的更改——都会被丢弃。使用这个选项要非常小心因为它会丢失所有未提交的更改。适用场景当你想彻底撤销最近的提交以及所有更改回到之前的状态时。⚠️ 警告 使用 --hard 选项会丢失最后一次提交的所有更改。请确保你不需要这些更改或者已经对它们做了备份。
下面是一个表格比较这三种 git reset 命令
命令HEAD 移动索引暂存区影响工作目录影响适用场景git reset --soft HEAD~1是保留更改无影响撤销提交保留更改准备新提交git reset HEAD~1是取消暂存更改保留更改撤销提交重新审查/修改更改git reset --hard HEAD~1是取消暂存更改丢弃更改彻底撤销提交和更改回到之前的状态
重要提醒 使用 git reset --hard 时务必要小心因为一旦执行未提交的更改将无法恢复。在任何可能会丢失数据的操作之前建议先做好备份。
2.git 已经commit了还没push修改最后的commit信息
如果你已经做了一个commit但还没有将其push到远程仓库并且希望修改这次commit的信息你可以使用git commit --amend命令进行操作。下面是一步一步的指导 打开你的命令行工具。 使用git log查看最近的commit确保你要修改的是最近一次的commit信息。 输入以下命令来修改最后一次的commit信息
git commit --amend这将打开你的默认文本编辑器允许你修改commit信息。在编辑器中修改commit信息然后保存并关闭编辑器。 如果你想直接在命令行中修改commit信息而不是打开文本编辑器可以使用以下命令其中new commit message是你的新commit信息
git commit --amend -m new commit message完成修改后你可以使用git log再次检查以确保commit信息已更新。 现在你可以像往常一样推送你的commit到远程仓库
git push origin your-branch-name请注意如果你的commit已经被推送到了远程仓库并且其他人可能已经基于这个commit进行了工作那么使用--amend操作可能会导致问题。在这种情况下你应该谨慎使用这个命令并且可能需要与你的团队协调来决定是否要修改远程仓库中的commit信息。
3.git 已经commit了,也push了发现远程没合发现还有没改完如何操作
如果你已经提交commit并推送push了代码到远程仓库并且发现还有未完成的修改需要添加你可以按照以下步骤操作
3.1. 在本地进行修改
首先在你的本地代码库中进行必要的修改。
3.2. 添加并提交修改
修改完成后将这些更改添加到暂存区并创建一个新的提交
git add .
git commit -m 说明你的修改如果修改较小你也可以选择将这些修改添加到上一个提交中使用 --amend 选项
git add .
git commit --amend --no-edit # 保持上次提交的信息不变
# 如果你想修改提交信息可以去掉 --no-edit3.3. 推送到远程仓库
如果你没有修改上一次的提交即第2步中没有使用 --amend你可以正常推送到远程仓库
git push origin branch-name如果你使用了 --amend 修改了上一个提交你需要强制推送因为历史已经改变
git push origin branch-name --force
# 或者使用更安全的 --force-with-lease 选项
git push origin branch-name --force-with-lease注意强制推送会重写远程仓库的历史。在共享的仓库中进行强制推送可能会给其他协作者带来问题。在强制推送之前最好跟团队成员沟通一下。
–force-with-lease 详解
--force-with-lease 是 git push 命令的一个选项它是 --force 的一个更安全的替代。强制推送使用 --force会覆盖远程仓库的分支而不管其他人是否已经推送了他们的提交。这可能会导致他人的工作丢失因为你的本地历史会覆盖远程历史。
相比之下--force-with-lease 提供了一种保护机制确保你不会意外覆盖其他人的更改。它会在强制推送之前检查远程分支的当前状态确保远程分支的当前状态与你上次获取时的状态一致。如果有差异说明可能有其他人已经推送了新的提交那么 --force-with-lease 会阻止你的推送操作。
这里是如何操作的
当你执行 git push --force-with-lease 时Git 会检查远程分支的当前引用是否匹配你本地的引用。如果它们匹配说明自从你上次同步以来没有人更新远程分支你的强制推送将会执行。如果它们不匹配说明有人在你之后推送了他们的更改你的推送将会被拒绝。这可以防止你不小心覆盖别人的工作。
--force-with-lease 的好处在于它提供了强制推送的能力同时减少了意外覆盖同事代码的风险。它是一种更加谨慎的做法尤其适用于多人协作的项目中。
这个选项还可以接受额外的参数来指定要检查的分支和引用
git push --force-with-leasebranch-name:expected-value这里branch-name 是你想要推送的远程分支名expected-value 是你期望远程分支引用的值。如果远程分支的实际引用与 expected-value 不同Git 将阻止推送。
使用 --force-with-lease 是一个更安全的做法因为它有助于防止数据丢失。不过即使是这种安全的强制推送也应该谨慎使用并且最好在推送之前与团队成员沟通。
3.4. 如果有必要打开一个新的合并请求Merge Request或拉取请求Pull Request
如果初始的合并请求还没有被处理你可以继续在原来的合并请求中添加信息说明有新的提交添加。如果合并请求已经关闭或者你需要创建一个新的合并请求根据你使用的平台GitHub, GitLab, Bitbucket等的规则进行操作。
请注意如果你的仓库设置了分支保护规则禁止了强制推送那么你可能需要联系仓库管理员或者使用别的方法比如创建一个新的提交来修复问题而不是修改已有提交。
根据你的具体情况和团队的工作流程这些步骤可能会有所不同。
4.使本地与远程保持一致
重置本地分支到远程分支的状态
如果你想要放弃本地分支上所有的更改并使其与远程分支完全一致可以使用 git reset 命令配合 --hard 选项。这样会使你的本地分支比如 master完全回退到远程分支的状态
git fetch origin
git reset --hard origin/branch_name⚠️ 警告 使用 --hard 选项会丢失所有未提交的更改和本地提交。在执行这个命令之前请确保你不需要这些更改或者已经对它们做了备份。
更新本地分支列表
有时远程仓库的分支可能会被删除或重命名你也需要更新你本地的分支列表以反映这些更改
git fetch --prune这个命令会从你的本地仓库中删除那些已经在远程仓库中被删除的追踪分支。
对于所有本地分支跟踪远程分支
如果你有多个分支需要同步你可以对每个分支重复上述的拉取或推送操作。此外确保本地分支正确地跟踪对应的远程分支可以使用
git branch -u origin/branch_name或者在推送本地分支时设置上游远程跟踪分支
git push -u origin branch_name通过这些基本操作你可以保持本地仓库与远程仓库的一致性。记得在执行可能会丢失数据的操作如 git reset --hard 前总是确保备份你的工作。
5.git stash的作用
git stash 是一个非常有用的 Git 命令它可以帮助你临时保存你的工作目录中的更改而不是做一个提交。这在以下情况下非常有用
当你正在进行一项工作但需要切换到另一个分支进行另一项工作时而你的当前更改又不足以做一个完整的提交。当你需要快速保存当前的工作状态以便稍后再回来继续工作。
git stash 通常与几个选项一起使用
git stash save message保存当前的工作进度。你可以提供一个消息作为参数以帮助记住这个stash中保存了什么。git stash list列出所有的 stash。git stash apply重新应用最近保存的 stash。你可以指定一个 stash 来应用如 git stash apply stash{2}。git stash pop应用最近的或指定的 stash并从 stash 列表中移除它。git stash drop删除最近的或指定的 stash。git stash clear删除所有的 stashes。
当你执行 git stash等同于 git stash push时Git 会执行以下操作
将你的暂存区和工作目录中的更改保存起来。回复暂存区和工作目录到最近的提交状态HEAD这样你就有了一个干净的工作状态。
这使得你可以切换分支并开始不同的工作或者保持当前分支的一个干净状态。当你准备好继续之前的工作时你可以用 git stash apply 或 git stash pop 来恢复你之前保存的更改。
请注意git stash 不会保存未追踪的文件比如新添加的文件还没有用 git add 添加到暂存区的文件除非你使用 git stash -u 或者 git stash --include-untracked。同样git stash -a 或 git stash --all 会保存所有的更改包括未追踪的文件和忽略的文件。