Git---git stash(储藏到缓存中) 暂时保存未被提交的数据至堆栈中

Git---git stash(储藏到缓存中) 暂时保存未被提交的数据至堆栈中
Git新版本stash的不同命令汇总https://blog.csdn.net/COCOLI_BK/article/details/164462591简单总结:储藏功能额外命令git restore --staged file回退暂存区此时文件已经add到暂存区还未进行commit的文件或目录git stash直接运行该命令则会无备注信息同时将修改的当前阶段的数据全部储藏起来git stash list; 列出储藏内的所有列表git stash save 备注信息; 这个是上一个命令的优化运行时可以备注该储藏列的目的是什么git stash apply number; 弹出对应数字列的改动恢复到页面中且暂存的文件会变为未暂存的状态不会删除stash中的数据git stash pop number; 弹出对应的数字列的改动恢复到页面中且暂存的文件会变为未暂存的状态会删除掉对应stash列中的数据git stash drop number; 直接删除对应stash列的储藏的数据记录且不恢复到页面文件中git stash apply | pop --index; 关键点在--index,作用就是发现所有的文件都变成了未暂存的如果想维持原来的样子即暂存过的依旧是暂存状态那么可以使用参数--index来实现最大程度的复原文件改动变化git stash clear; 清除堆栈中所有的储藏内容git stash show number; 展示堆栈中对应文件和当前文件的大概变化粗略的展示。git stash show -p number; 展示堆栈中对应文件和当前文件的详细变化精准的展示。git stash -u[save 说明信息] 会储藏任何创建的未跟踪文件。git stash --patch如果指定了--patch标记Git不会储藏所有修改过的任何东西但是会交互式地提示哪些改动想要储藏、哪些改动需要保存在工作目录中。下面做详细说明git stash --keep-index它告诉 Git 不要储藏任何你通过 git add 命令已暂存的东西。git status -s 在储藏的时候时不时通过该命令查看文件的状态,任何时候都可以使用掌握分支最新动态。场景1 当正在dev分支上开发某个项目这时项目中出现一个bug需要紧急修复但是正在开发的内容只是完成一半还不想提交这时可以用git stash命令将修改的内容保存至堆栈区然后顺利切换到hotfix分支进行bug修复修复完成后再次切回到dev分支从堆栈中恢复刚刚保存的内容。2 由于疏忽本应该在dev分支开发的内容却在master上进行了开发需要重新切回到dev分支上进行开发可以用git stash将内容保存至堆栈中切回到dev分支后再次恢复内容即可。总的来说git stash命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中后续可以在某个分支上恢复出堆栈中的内容。这也就是说stash中的内容不仅仅可以恢复到原先开发的分支也可以恢复到其他任意指定的分支上。git stash作用的范围包括工作区和暂存区中的内容也就是说没有提交的内容都会保存至堆栈中创作中心 。git stash 这个命令不能储藏Untracked files(未被跟踪的文件)个人看法实践过的。后期不对我会纠正2024年7月29日这里更新下储藏未跟踪文件时使用 git stash save -u ‘备注信息’ 即可储存1. git stash能够将所有未提交的修改工作区和暂存区保存至堆栈中用于后续恢复当前工作目录。$ git status On branch master Changes not staged for commit: (use git add file... to update what will be committed) (use git checkout -- file... to discard changes in working directory) modified: src/main/java/com/wy/CacheTest.java modified: src/main/java/com/wy/StringTest.java no changes added to commit (use git add and/or git commit -a) $ git stash Saved working directory and index state WIP on master: b2f489c second $ git status On branch master nothing to commit, working tree clean2. git stash save 注释作用等同于git stash区别是可以加一些注释如下 git stash的效果 stash{0}: WIP on master: b2f489c second 1 git stash save “test1”的效果 stash{0}: On master: test1 git stash save -a “stash message” ---将所有的改动、删除、新增放进stash贮藏中 git stash save --patch 将部分改动放进stash贮藏中交互式地提示哪些改动想要贮藏、 哪些改动需要保存在工作目录中3. git stash list查看当前stash中的内容,所有保存的stash列表4. git stash pop将当前stash中的内容弹出并应用到当前分支对应的工作目录上。 注该命令将堆栈中最近保存的内容删除栈是先进后出 顺序执行git stash save “test1”和git stash save “test2”命令效果如下 $ git stash list stash{0}: On master: test2 stash{1}: On master: test1 $ git stash pop On branch master Changes not staged for commit: (use git add file... to update what will be committed) (use git checkout -- file... to discard changes in working directory) modified: src/main/java/com/wy/StringTest.java no changes added to commit (use git add and/or git commit -a) Dropped refs/stash{0} (afc530377eacd4e80552d7ab1dad7234edf0145d) $ git stash list stash{0}: On master: test1可见test2的stash是首先pop出来的。如果从stash中恢复的内容和当前目录中的内容发生了冲突也就是说恢复的内容和当前目录修改了同一行的数据那么会提示报错需要解决冲突可以通过创建新的分支来解决冲突。5. git stash apply将堆栈中的内容应用到当前目录不同于git stash pop该命令不会将内容从堆栈中删除也就说该命令能够将堆栈的内容多次应用到工作目录中适应于多个分支的情况。$ git stash apply On branch master Changes not staged for commit: (use git add file... to update what will be committed) (use git checkout -- file... to discard changes in working directory) modified: src/main/java/com/wy/StringTest.java no changes added to commit (use git add and/or git commit -a) $ git stash list stash{0}: On master: test2 stash{1}: On master: test1 堆栈中的内容并没有删除。 可以使用git stash apply stash名字如stash{1}指定恢复哪个stash到当前的工作目录。6. git stash drop 名称比如stash{0} 则填写数字 0 即可从堆栈中移除某个指定的stash{n}7. git stash apply --index 或 git stash pop --index(维持储藏前的状态弹出对应储藏内容)作用就是发现所有的文件都变成了未暂存的如果想维持原来的样子即暂存过的依旧是暂存状态那么可以使用参数--index来实现最大程度的复原文件改动变化实例代码如下当前文件状态 git status储藏文件: git stash save --index未加--index时弹出储藏数据的状态git stash apply加过--index参数后弹出储藏内容的文件状态git stash apply --index8. git stash clear清除堆栈中的所有内容9. git stash show查看堆栈中最新保存的stash和当前目录的差异。$ git stash show src/main/java/com/wy/StringTest.java | 2 - 1 file changed, 1 insertion(), 1 deletion(-)git stash show 1 查看指定的stash和当前目录差异。比如stash{0} 则填写数字 0 即可 通过 git stash show -p 0查看详细的不同比如stash{0} 则填写数字 0 即可$ git stash show -p diff --git a/src/main/java/com/wy/CacheTest.java b/src/main/java/com/wy/CacheTest.java index 6e90837..de0e47b 100644 --- a/src/main/java/com/wy/CacheTest.java b/src/main/java/com/wy/CacheTest.java -7,6 7,6 package com.wy; */ public class CacheTest { public static void main(String[] args) { - System.out.println(git stash test); System.out.println(git stash test1); } } diff --git a/src/main/java/com/wy/StringTest.java b/src/main/java/com/wy/StringTest.java index a7e146c..711d63f 100644 --- a/src/main/java/com/wy/StringTest.java b/src/main/java/com/wy/StringTest.java -12,7 12,7 public class StringTest { Test public void test1() { - System.out.println(); System.out.println(git stash test1); System.out.println(Strings.isNullOrEmpty());//true System.out.println(Strings.isNullOrEmpty( ));//false System.out.println(Strings.nullToEmpty(null));//同样通过git stash show stash{1} -p查看指定的stash的差异内容。10. git stash--keep-index[save 备注信息]仅储藏未暂存的文件对应的有暂存和未暂存的文件如下执行该命令后暂存的文件未被暂存11. git stash branch新分支名 (2020年8月4日来说明该方法)git stash branch branchname stash 将stash的内容新建一个分支分支停留在执行stash时的内容 说明运行 git stash branch 新分支名 创建一个新分支检出储藏工作时所在的提交 重新在那应用工作然后在应用成功后扔掉储藏 这里强调下当后面的新分支已经存在的话就没必要使用该命令了直接切换到对应的分支 git stash apply --index ; 如果有冲突的话就手动来更改处理之后代码完善后在推到主分支上面。 代码如下从最新的stash创建分支。 应用场景当储藏了部分工作暂时不去理会继续在当前分支进行开发 后续想将stash中的内容恢复到当前工作目录时如果是针对同一个文件的修改即便不是同行数据 那么可能会发生冲突恢复失败这里通过创建新的分支来解决。 可以用于解决stash中的内容和当前目录的内容发生冲突的情景。发生冲突时需手动解决冲突。12. git stash --patch 命令使用需要单独缓存个别文件时完美解决天工AI-搜索、对话、写作、文档分析、画画、做PPT的全能AI助手执行git stash --patch命令。Git 会展示当前工作目录中所有文件的差异。按照提示选择要暂存的更改。你可以使用y确认暂存n跳过q退出a全部暂存d删除选定的更改块e编辑选定的更改块。完成选择后Git 会创建一个新的 stash。实例假设你正在开发一个功能并且在feature分支上工作。你修改了file1.txt和file2.txt但现在需要切换到main分支修复一个紧急 bug。你不希望丢失feature分支上的更改可以使用git stash --patch来暂存部分更改git stash --patchGit 会显示file1.txt和file2.txt的差异。如果你只想暂存file1.txt中的更改你可以按y确认这些更改然后按n跳过file2.txt的更改。完成选择后Git 会创建一个新的 stash并将file1.txt的更改暂存起来。Staged hunk (press y to stage, or n to skip): y Staged hunk (press y to stage, or n to skip): n No changes to add to stash. Saved unstaged hunks into stash{0}现在你可以安全地切换到main分支修复 bug并在适当的时候通过git stash pop或git stash apply命令恢复file1.txt的更改。注意事项使用git stash --patch时确保你的工作目录是干净的或者至少是你想要暂存的更改所在的状态。如果在暂存过程中遇到冲突Git 会暂停暂存过程并提示你解决冲突。解决冲突后可以使用git add命令将解决后的更改添加到暂存区然后继续暂存过程。使用git stash list命令可以查看所有暂存的 stash 列表并通过git stash pop或git stash apply命令应用它们。在应用 stash 之前建议使用git stash show命令来查看 stash 包含的具体更改以防止不必要的更改被应用。其他人的总结git-stash用法小结 - Tocy - 博客园你可能不知道的关于 Git stash 的技巧 - 简书

最新新闻

日新闻

周新闻

月新闻