我是git的新手,并不清楚stashing是如何工作的.
假设我正在分支主服务器上工作并尝试git pull接收错误,即我的本地更改将被覆盖并需要被隐藏或提交.如果我没有上演我的任何更改并运行git stash,那么做一个git pull并成功更新,当我发生了什么git stash apply?
一般来说,如果其他人修改文件并且我运行git pull,那么当我发生时会发生什么run git stash apply?它是否会覆盖刚刚更新的文件,无论它们是否在我存储时被暂存?它是否会覆盖我刚刚更新过的每个文件,git pull以及被隐藏的文件?
我正在尝试使用一系列单元测试进行预提交钩子,我想确保我的工作目录是干净的.编译需要很长时间,所以我希望尽可能利用重用编译的二进制文件.我的脚本遵循我在网上看到的例子:
# Stash changes
git stash -q --keep-index
# Run tests
...
# Restore changes
git stash pop -q
Run Code Online (Sandbox Code Playgroud)
这会导致问题.这是repro:
// Step 1到a.javagit add .// Step 2到a.javagit commit
git stash -q --keep-index #存储更改git stash pop -q #恢复更改此时我遇到了问题.该git stash pop -q显然有冲突,a.java我有
// Step 1
<<<<<<< Updated upstream
=======
// Step 2
>>>>>>> Stashed changes
Run Code Online (Sandbox Code Playgroud)
有没有办法让这个流畅干净?
不太确定发生了什么,但是git stash似乎处于一个不好的地方.
% git stash list
stash@{0}: filter-branch: rewrite
stash@{1}: filter-branch: rewrite
stash@{2}: On mysolr: start mysolr stuff
Run Code Online (Sandbox Code Playgroud)
没关系,并且git show stash@{0}工作正常.但:
% git stash drop
'' is not a stash reference
% git stash pop
'' is not a stash reference
% git stash drop stash@{0}
'stash@{0}' is not a stash reference
Run Code Online (Sandbox Code Playgroud)
我过去常常使用git stash而不是碰到这个.我最近重写了历史记录,以便在发布到github之前从历史记录中删除文件.我跑的命令是
git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch FILENAME' \
--prune-empty --tag-name-filter cat -- --all
Run Code Online (Sandbox Code Playgroud)
任何想法如何修复藏匿?
使用git stash list显示带有ID的存储列表.使用git stash list --date=local或git stash list --date=relative给我他们的时间,但我不知道他们的相应ID是什么.
我想在某个时间获得藏匿.
我可以在没有内容的情况下在藏匿处列出修改过的文件的名称吗?
在搜索时,我只发现打印整个差异的人,无法仅查看文件名.
当存储一些更改时,Git会创建两个单独的提交,"分支上的WIP"和"分支上的索引":
$ git log --graph --all
* commit 98aac13303ca086580c1ec9ccba5fe26c2a8ef3c
|\ Merge: 7d99786 82c5c76
| | Author: Tieme <my@email.com>
| | Date: Wed Nov 19 09:58:35 2014 +0100
| |
| | WIP on development: 7d99786 Last real commit
| |
| * commit 82c5c763357c401135675a39bfabf9b7f6805815
|/ Author: Tieme <my@email.com>
| Date: Wed Nov 19 09:58:35 2014 +0100
|
| index on development: 7d99786 Last real commit
|
|
| * commit 7d9978637a0e1ef92f2432189bdebf2317f0b2f0
| Author: Tieme <my@email.com>
| Date: Tue Nov 18 …Run Code Online (Sandbox Code Playgroud) 如何使用未跟踪的文件进行Git存储,将其推送到补丁并在另一台计算机中恢复.
git stash save -u feature
git stash show -p > patch
git apply patch
Run Code Online (Sandbox Code Playgroud)
但路径没有未跟踪文件
当我生成一个存储时git,有一个"父"(我隐藏我的更改之前的最后一次提交).
当我git stash用来存储我的更改时,该父提交的ID将添加到描述我的存储的消息中.打电话git stash list可以显示:
stash@{0}: WIP on master: c09a3fc second commit
stash@{1}: WIP on master: 063b893 first commit
stash@{2}: WIP on master: 063b893 first commit
Run Code Online (Sandbox Code Playgroud)
但是当我运行git stash save "My own message"父提交的ID时没有添加(git stash list):
stash@{0}: On master: My own message
stash@{1}: WIP on master: c09a3fc second commit
stash@{2}: WIP on master: 063b893 first commit
stash@{3}: WIP on master: 063b893 first commit
Run Code Online (Sandbox Code Playgroud)
有没有办法显示父级提交的ID到存储列表?
我试过:git stash list --oneline --parents,这给了我:
1b5dfb1 …Run Code Online (Sandbox Code Playgroud) 我的工作流程目标通常是避免无意义的合并.要做到这一点,我经常做两件事之一:
git pull --rebase防止不必要的合并.如果我以后希望更改现有提交,我会进行更改,提交并合并使用git rebase --interactivegit stash了更改,然后git pull通常只是git stash pop在我希望修改和/或提交它们时进行这些更改.一些同事警告我git stash save/ git stash pop不安全.我想知道使用提交和git pull --rebase存储列表是否有任何微妙的优点.
我希望.patch根据我可以查看的旧存储的差异创建一个文件git stash show -p stash@{2}
我试过这个,但没有运气:
git format-patch stash@{2} --stdout > file.patch
Run Code Online (Sandbox Code Playgroud)
我认为它会像正常提交一样工作?为很可能超级厚而道歉。
谢谢!