“git stash”是否在内部“提交”到我的本地存储库?

2024-04-17

我以前只手动commit之前到我的本地仓库pushing 到远程仓库。

但更多时候我pull获取我的编码伙伴的更改。

有时我们都处理同一个文件并且存在冲突。在这些情况下,他告诉我要做一个git stash在我之前git pull然后一个git stash pop之后。

但有时这会导致 git 下次告诉我我不能pull因为我有未合并的文件。这些通常是我不希望对本地树进行的实验性更改commit or push.

有几次我需要发送我的工作,结果是远程存储库中的中间修订,包括我的本地实验、调试代码等,而我从来不想发送这些。我想避免造成这样的混乱。

这是由于stash修改我的本地存储库?如果是这样,我怎样才能避免这种情况?如果不是,还有什么可能导致它?我是 git 的菜鸟,只使用这几个命令。


我想在这里首先提到这个词index意思是一样的暂存区,并且你应该记住有three文件在任意时刻“活动”的版本:HEAD版本、索引或“暂存”版本以及工作树版本。当你第一次跑步时git checkout <branch>通常,所有三个版本都匹配。任何提交的版本都是永久的——就像提交一样永久——并且不可更改:您无法触及当前提交中存储的版本。你can随时覆盖索引和工作树版本,但正常模式是:

  1. 查看提交的版本:将提交复制到索引,然后将索引复制到工作树。
  2. 使用工作树版本。
  3. Use git add将工作树版本复制回索引。

重复步骤2、3直至满意;或使用git add --patch建立一个类似于工作树版本但不同的索引版本。 (通常这样做是为了在运行调试文件时制作一些文件的可提交版本,其中没有额外的调试内容。)这确实意味着索引和工作树可以彼此不同and来自HEAD commit.

如果你跑步的话git commit,这会从索引/暂存区域中的任何内容进行提交就在那时。这就是为什么你必须保持git add始终从工作树复制到索引中。


As Sajib Khan answered https://stackoverflow.com/a/47007365/1256452, git stash save does make commits. More precisely, if git stash save does anything (sometimes it does nothing, if there are no changes), it makes at least two commits. If you use the --untracked or --all flag, it makes three commits. The git stash documentation has a small diagram of this under its DISCUSSION section. https://www.kernel.org/pub/software/scm/git/docs/git-stash.html#_discussion Like the documentation, we'll mostly ignore the third commit.1

这些提交的不寻常之处在于它们是在no分支。特殊参考名称refs/stash指向新创建的w(工作树)提交。它至少有两个父母,其中一个是HEAD提交,另一个是i(索引)提交。和--untracked or --all有第三个父母(我称之为u)保存额外的、未跟踪的文件。

In all but one case2 that we'll also ignore here, after saving away the index and work-tree versions of each file in the i and w commits, git stash save then runs git reset --hard HEAD to replace the index and work-tree versions of those files with the versions stored in the HEAD commit. So your work is now saved, and can be restored later, but no longer exists in either index (aka staging area) or work-tree.


1If (and only if) you use the --all or --untracked option to create the third commit, Git also runs git clean with appropriate options to delete the files stored in this third parent. Keep this in mind: any existing untracked files (whether ignored or not) are never included in either i or w. They are not saved at all, and hence not cleaned away either, unless you use these extra options. Note that the definition of an untracked file is simply any file that is not in the index right now

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“git stash”是否在内部“提交”到我的本地存储库? 的相关文章

  • 有没有办法让 git flow 显示它在幕后执行的命令?

    有什么方法可以让 git flow 提前告诉我当我执行 flow 命令时它将执行的确切 git 命令吗 或者告诉我它是东吗 我只能看到输出和摘要吗 你可以使用Git的GIT TRACE 环境变量 http git scm com docs
  • `git ls-files -s` 输出中不同字段的含义是什么?

    在 Git 中 命令返回的典型结果行git ls files s好像 100755 be2c2e9b0966253096472d4b482c458bc892e493 0 gitignore 这些字段是什么意思 不用再犹豫了git ls fi
  • 第一次使用node.js - “ReferenceError:节点未定义”

    我刚刚安装了node js 我尝试编写应该检查版本的node v 但它不起作用 这是输出 gt node v ReferenceError node is not defined at repl 1 2 at REPLServer self
  • 如何合并两个连续的 git 存储库

    我有一个相当独特的情况 我有一个名为 Project1 的存储库 我在其中工作了一些时间 几个月 一年后 我创建了存储库 Project1 Again 从 Project1 停止的地方开始 现在 我希望修订历史记录是连续的 因此我希望它们合
  • 如何将工作树与提交进行比较?

    我在用着 git diff mycommit 用于比较我的工作树mycommit 但它似乎忽略当前索引中不存在的文件 您可以按如下方式重现它 git init echo A gt A txt git add git commit m A g
  • git 日志历史记录图,每次提交一行,彩色,带有日期

    我需要的格式如下 git log decorate graph oneline date order 但我也需要它 包含日期 短 具有相同的颜色 I tried git log decorate graph oneline date ord
  • `git Reset HEAD file` 是否也检查该文件?

    我错误地向 git 添加了一个目录 当我按照提示操作时here https stackoverflow com questions 348170 undo git add通过执行以下操作来撤消添加git reset HEAD
  • 如何在 macOS 上将 Git 升级到最新版本?

    我刚刚购买了一台装有 OS X Lion 的新 Mac 我在终端中检查了默认安装的 git 版本 我得到了答案 git version gt git version 1 7 5 4 我想将 git 升级到最新版本 1 7 8 3 因此我下载
  • 为所有子文件夹设置 git 配置值

    我知道可以设置每个存储库的配置来覆盖用户级配置 即 path to my repo gitconfig覆盖 gitconfig 是否可以设置 git 配置来覆盖给定文件夹的所有子文件夹的用户级设置 即 我有 topLevelFolder1
  • git 排除与忽略

    I use Tower http www git tower com 用于在 Mac 中使用 Git Tower 中的设置具有创建 gitignore 的 忽略 部分 但它还有另一个名为 排除 的部分 似乎可以将排除与 git ls fil
  • Git 更改丢失 - 为什么?

    我们的开发团队正在使用 git 最近我们至少两次丢失了文件更改 我们正在使用私人 Github 存储库 在当前情况下 我们可以返回 Github 上的日志并查看我对文件所做的一些更新 后来 另一位团队成员更改了文件的不同部分 它似乎破坏了我
  • Git:从 master 以外的分支克隆

    我正在尝试从 Github 的存储库中提取数据 但我不想克隆主分支 我想克隆其他一些分支 当我尝试时git clone
  • 如何在不在存储库中的情况下执行 Git 命令?

    有没有一种方法可以在不位于存储库的情况下对存储库执行 Git 命令 例如这样的事情 git home repo log 请不要告诉我cd到它 我正在通过一个exec call Use C作为 git 的第一个参数 git C home re
  • 部分共享git仓库

    我是 git 新手 我想知道是否支持以下场景 如果支持的话如何支持 即用于设置和更新的 git 命令 可以从三个不同的地方获取存储库 本地 镜像 和 github mirror 完全镜像 local github 镜像 local 但 受版
  • 如何使用git-svn切换svn分支?

    复制 如何让 git svn 使用特定的 svn 分支作为远程存储库 https stackoverflow com questions 192736 how do i make git svn use a particular svn b
  • Gerrit 和 Active Directory

    我正在尝试设置 Gerrit 以使用我们的公司 Active Directory 进行身份验证 我知道很多人都设法让它发挥作用 但它对我来说不起作用 如果我运行一个ldapsearch命令如下我得到了正确的结果 所以我知道我的搜索字符串是正
  • Phonegap使用命令行工具添加插件

    我是phonegap的新手 我按照phonegap官方网站中定义的步骤使用命令行工具创建项目 nodejs 我成功创建项目并添加平台 但是 当我尝试添加插件时出现以下错误 命令 cordova plugin add https git wi
  • 删除 Git 存储库,但保留所有文件

    在我使用 Linux 的过程中的某个时刻 我决定将我的主目录中的所有内容都放入源代码管理中是个好主意 我不是在问这是否是一个好主意 我是在问如何撤销它 删除存储库的原因是我最近安装了 Oh My Zsh 而且我非常喜欢它 问题是我的主目录有
  • Git - 远程:错误:无法运行钩子/后接收:没有这样的文件或目录

    我收到错误 remote error cannot run hooks post receive No such file or directory 当尝试推送到远程时 接收后文件存在于正确的位置 testnew git hooks 并包含
  • 为 RHEL 6 安装/构建 git-svn

    我无权访问 RHEL6 存储库 那么在 RedHat Enterprise Linux 6 上构建和 或安装 git svn 工具的最佳方法是什么 通过卸载现有的 yum擦除git 并从源安装最新的来设法安装git和git svn 1 7

随机推荐

  • 将 uri 保存到共享首选项并使用媒体播放器播放

    这是我用来将 Uri 的字符串表示形式保存到 SharedPreferences 的代码 public void onActivityResult int requestCode int resultCode Intent data sup
  • Java 8 中使用了哪个 JAXB 版本?

    JAXB Java Architecture for XML Binding 已作为 Maven 工件发布 尽管它在 Java 8 以及具有选项的 Java 9 10 之前与 JRE 捆绑在一起 我的问题是 Maven Central 上的
  • 计算时间长

    这是我上一个问题的链接 它引导我找到了这个问题 C 嵌套 foreach 循环优化 https stackoverflow com questions 7729231 c nested foreach loop optimization 计
  • 为什么服务器控件在放置在内容标记内时会带有下划线?

    我有一个网络内容表单 其中包含Div以及各种服务器控件 例如DropDownList 当我运行该应用程序时 它运行良好 没有任何错误 但当我查看 HTML 源代码时 服务器控件带有红色下划线 将鼠标移过来时 说 DropDownList 会
  • Visual C# 2010 Express:为新类指定默认访问修饰符?

    每当我使用 Visual Studio 2010 Express C 创建新类时 它都会创建不带访问修饰符的新类 十分之九我希望我的新课程公开 如何让 Visual Studio 默认创建带有 public 修饰符的空类模板 诀窍是创建一个
  • 删除 numpy 数组的重复行[重复]

    这个问题在这里已经有答案了 如何删除二维的重复行numpy array data np array 1 8 3 3 4 1 8 9 9 4 1 8 3 3 4 答案应该如下 ans array 1 8 3 3 4 1 8 9 9 4 如果有
  • HSQLDB服务器模式用户名/密码

    如果我使用 Java 代码在服务器模式下启动 HSQLDB 则服务器启动不会出现任何问题 但是 当我尝试通过 Java 代码或通过 HSQLDB DatabaseManagerSwing 连接到相同的数据库时 我无法连接 我在仅内存模式下使
  • 通过API服务端点消费来自Kafka主题的消息

    目前 我有一个 API 服务端点 用 netcore6 C 编写 它将接受消息对象并将其保存到数据库 然后将该消息发布到 kafka topic 2 如何利用我的 API 服务端点始终监听 观看并连接到 kafka topic 1 一旦新消
  • 为什么`从. importviews`可以解决Flask中的循环导入吗? [复制]

    这个问题在这里已经有答案了 我从中学习更大的应用 http flask pocoo org docs 0 10 patterns packages 在这个文档中 它说 所有视图函数 顶部带有route 装饰器的函数 都必须导入到init p
  • NAudio - 更改缓冲麦克风音频的音高并发送到虚拟音频线

    我决定尝试使用 NAudio 和虚拟音频线创建一个与 Discord 或类似软件 一起使用的音板 我能够将音频从麦克风 注入 到音频电缆 这样我就可以通过选择虚拟音频电缆作为 Discord 中的输入设备来播放声音文件和麦克风音频到 Dis
  • 在类中初始化 static struct tm

    我想使用 tm 结构作为类中的静态变量 花了一整天的时间阅读和尝试 但它仍然无法工作 如果有人能指出我做错了什么 我将不胜感激 在我的课堂上 在公共下 我将其声明为 static struct tm dataTime 在main cpp中
  • ObservableCollection CollectionChanged 事件

    我有一个可观察的集合 并且在其上连接了一个 collectionChanged 事件 我将其项目绑定到用户界面中的列表框 当用户从列表框中删除 UI 中的某些项目时 CollectioChanged 会正确触发 但是 我需要知道已删除项目的
  • Android:使用 Admob 的 Consent SDK 获取用户位置

    我对 AdMob 的新功能有疑问 同意 SDK https developers google com admob android eu consent consent sdk the 整合指南 https developers googl
  • 相机框架相对于基准点的世界坐标

    我正在尝试确定世界坐标中的相机位置 相对于基于场景中找到的基准标记的基准位置 我确定 viewMatrix 的方法如下所述 确定相机姿势 https stackoverflow com questions 28335954 determin
  • 如何配置 Magento Enterprise 使用 Solr 作为主要搜索引擎?

    我尝试寻找文档 但它非常稀疏 我编写了以下指南 希望它可以帮助人们节省 2 3 个小时的安装 设置和配置时间 与 MySQL 全文搜索标准设置相比 使用 Solr 带来的性能提升非常惊人 在您的 Magento 安装中让它工作绝对值得花时间
  • 如何使用终端/cmd编译java项目

    我厌倦了使用 Eclipse 因为它太 简单 和 老式 所以我转向了一个名为 Sublime Text 3 的程序 并使用了一个名为 material theme 的包 这使得该程序看起来平坦且一切都很好 但我想用它来编写 Java 代码
  • 当我降级到 1.7 后执行 java -version 时,我仍然看到 Java 1.8

    我从 1 8 降级了 java 1 7 但降级时仍然看到 1 8java version 我改变了path并且还做了JAVA HOME1 7 更改为 JAVA HOME C Program Files x86 Java jdk1 7 0 7
  • 在 Sproutcore 2 中编写自定义控件

    我对 Sproutcore 相当陌生 但对 Handlebars 很熟悉 我已经浏览了 Todo 教程并查看了其他一些示例 我喜欢它的一切 并且想在 Backbone 上使用它 但我很难理解如何连接自定义控件 我可以看到一些数据将在绑定中发
  • 使用 BeanUtils 检索字段值

    我想提取未由某些自定义注释标记的私有字段值 这可以通过 BeanUtils 实现吗 如果是 怎么办 是的 假设您知道字段名称 您可以使用PropertyUtils getSimpleProperty http commons apache
  • “git stash”是否在内部“提交”到我的本地存储库?

    我以前只手动commit之前到我的本地仓库pushing 到远程仓库 但更多时候我pull获取我的编码伙伴的更改 有时我们都处理同一个文件并且存在冲突 在这些情况下 他告诉我要做一个git stash在我之前git pull然后一个git