我在我的开发分支中有一些未提交的更改,并且我使用它们进行了存储git stash,但是有些更改在那些被隐藏的更改中非常重要.有没有办法找回这些变化?
此外,我已经在存储的代码文件之上做了一些更改.
如果可能的话,我是否有可能检索到新分支的藏匿更改?
我知道如何解决这个问题:
user@host$ git pull
Updating 9386059..6e3ffde
error: Your local changes to the following files would be overwritten by merge:
foo.bar
Please, commit your changes or stash them before you can merge.
Aborting
Run Code Online (Sandbox Code Playgroud)
但是,是不是有办法让git pull做stash和pop舞蹈给我吗?
如果此命令具有不同的名称,则可以.
创建shell别名git stash; git pull; git stash pop是一种解决方案,但我寻找更好的解决方案.
我是git的新手,并不清楚stashing是如何工作的.
假设我正在分支主服务器上工作并尝试git pull接收错误,即我的本地更改将被覆盖并需要被隐藏或提交.如果我没有上演我的任何更改并运行git stash,那么做一个git pull并成功更新,当我发生了什么git stash apply?
一般来说,如果其他人修改文件并且我运行git pull,那么当我发生时会发生什么run git stash apply?它是否会覆盖刚刚更新的文件,无论它们是否在我存储时被暂存?它是否会覆盖我刚刚更新过的每个文件,git pull以及被隐藏的文件?
我想隐藏未跟踪的文件,但我继续传递错误的选项.对我来说这听起来是对的:
git stash save [-a|--all]
Run Code Online (Sandbox Code Playgroud)
但实际上这也隐藏了文件.正确的是:
git stash save [-u|--include-untracked]
Run Code Online (Sandbox Code Playgroud)
当我运行git stash save -a并尝试git stash pop它时,我得到所有被忽略文件的无数错误:
path/to/file1.ext already exists, no checkout
path/to/file1.ext already exists, no checkout
path/to/file1.ext already exists, no checkout
...
Could not restore untracked files from stash
Run Code Online (Sandbox Code Playgroud)
所以命令失败了.
如何恢复跟踪和未跟踪的更改?git reflog不存储存储命令.
我正在写一个git pre-commit钩子.
该脚本可以重新格式化一些代码,因此它可以修改分阶段文件.
如何重新暂存已经上演的所有文件?
是有办法有一个pre-commit钩子,其自动格式化代码(例如用astyle),但并没有破坏的部分提交吗?
工作流程:
# edit a file.txt
git add -p file.txt
# add one chunk, but not another
git commit -m 'a message'
[PRE_COMMIT_HOOK] Formatting source code
git status
# the "another" chunk is still not added
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果你git add在预提交钩子里面做了一个,这是在脚本格式化源代码之后需要的,那么也添加了"另一个"块.但我不希望这样.
有没有办法实现这个目标?
这种情况:
git stash 在分支A上git checkout Bgit stash 在分支B上git checkout Agit stash pop 在分支A上在上述清单的第7步之后,我在存储之前在分支A上所做的更改没有恢复,但是在分支B上进行的更改在分支A上弹出。我cmd z在分支A上使用了该文件,并回到了先前的状态,有我所做的更改。这似乎分支的移动分支B的同样的事情发生在头部头部时,我git checkout B和git stash pop该分支:分支B的所有分支一所做的更改,但不是我的分支B.我所做的更改用于cmd z再恢复到我需要的分支状态。
一段时间以来,这给我带来了很多问题,直到被允许再次在项目上提交代码(没人可以提交一段时间,因为提交时会自动将服务器推送到服务器,并且经理不希望新的代码出现在服务器中)。服务器,直到他们运行了一些测试)。如何仅弹出分支本身所做的更改,而不弹出其他分支所做的更改?
按照习惯,我会经常修改我的 repo,并使用一次添加/提交它 git commit -am 'my commit message'
有时我只想添加几个修改过的文件,所以我会发出准备git add命令来精心设置我的暂存区,并将准备提交的更改与半生不熟的更改分开。
然后,我会git commit -am '...'像往常一样发出相同的命令来完成整个事情。
有没有办法让我禁用该git commit -a选项,和/或在我使用-a开关时发出警告?我想训练自己摆脱这种粗略的习惯......
我只在访问远程存储库commit之前手动访问本地存储库。push
但更多时候我是pull为了让我的编码伙伴做出改变。
有时我们都处理同一个文件并且存在冲突。git stash在这些情况下,他告诉我在我之前做一个git pull,然后在git stash pop之后做一个。
但有时这会导致 git 下次告诉我不能,pull因为我有未合并的文件。这些通常是我不希望commit或对我的本地树进行的实验性更改push。
有几次我需要发送我的工作,结果是远程存储库中的中间修订,包括我的本地实验、调试代码等,而我从来不想发送这些。我想避免造成这样的混乱。
这是由于stash修改了我的本地存储库吗?如果是这样,我怎样才能避免这种情况?如果不是,还有什么原因造成的?我是 git 的菜鸟,只使用这几个命令。
我想编写一个脚本,允许我轻松更改分支,保持当前的更改.
git stash
go checkout main
git stash pop
Run Code Online (Sandbox Code Playgroud)
问题是如果存储库中当前没有更改.然后stash pop会弹出以前的藏匿处.检查pop是否有变化的最简单方法是什么?
git ×10
git-stash ×6
git-pull ×2
githooks ×2
bash ×1
formatting ×1
git-branch ×1
git-commit ×1
git-config ×1
git-stage ×1