以前使用 svn 的时候,每个 branch 都在本地有一份代码,这样方便在切换分支,在一个分支加 feature,可以很方便的在另外的分支上修 bug。
后来使用 git 之后,默认所有 branch 都位于在一份 copy 中,有的时候临时要切个分支,但有不想提交的时候,只能用 git stash 来暂存下改动。问题是这样很麻烦,有的时候 add 了新文件忘记 stage,git stash pop 出来有问题。
当然也可以使用 git 来 checkout 不同分支,不同 copy。
大家是怎么做的呢?
1
sagaxu 2018-07-31 09:26:14 +08:00 via Android 11
|
2
HongJay 2018-07-31 09:44:10 +08:00
我也是 svn 转的。。同样有这个问题
|
3
reus 2018-07-31 09:48:36 +08:00
……你直接把目录复制一份,不就是另一份代码了
|
4
bjfane 2018-07-31 09:50:25 +08:00
svn 是纯 copy 型分支,git 是指针型分支
手头的非常不完整,不想 commit,那 stash 没问题,而且 查看 stash list 也能看是在哪个分支上的,也有命令看差异, 如果是因为 新文件不习惯的话,可以尝试 commit,大不了 合并 commit 了 ,总的来说比 stash 更麻烦 |
5
xianyu0 2018-07-31 09:50:50 +08:00 8
git stash -u // 可以把未跟踪的文件也加入 stash
|
6
liuzhedash 2018-07-31 09:53:23 +08:00 1
@reus #3
文件比较多的项目,复制一次很麻烦的,如果有 node_modules 目录就更尴尬了 |
7
ahmcsxcc 2018-07-31 09:54:50 +08:00
同样有这个问题
|
8
newtype0092 2018-07-31 09:55:15 +08:00
stash 不应该是一个常用的功能,如果你频繁的在没有完成当前提交的情况下切换分支,说明你的工作流有问题吧,这里一脚那里一脚有什么效率可言啊。
自己一般来说最多两个 stash,再多可能都忘了之前在干嘛了,还不如删了重新写。 |
9
linuxchild 2018-07-31 10:20:09 +08:00
考虑一下 git flow ?
|
10
ttyant 2018-07-31 10:23:51 +08:00 via Android
来回倒版本的不是好程序员,git 不是为你而生
|
11
beny2mor 2018-07-31 10:26:37 +08:00 2
我用的不多,一般切换前先 commit,切换回来后可以使 git commit --amend 合并
|
12
woshifyz 2018-07-31 10:31:31 +08:00
一般都可以 commit,然后用 rebase 操作下就好了,核心是你要从概念上转过来,操作起来就如鱼得水
|
13
Biwood 2018-07-31 10:52:37 +08:00
执行 git stash 之前怎么着都得先 git add 一下吧,这样可以防止漏掉新文件,这是操作习惯的问题。
PS:楼主头像来自风骚律师,我也挺喜欢这部剧的镜头美感。 |
14
rockyou12 2018-07-31 11:11:49 +08:00
我也觉得 commit 算了,stash 挺容易搞错的,即便你不 rebase 最多就 commit 日志难看一点
|
15
hicdn 2018-07-31 11:46:36 +08:00
我一般是要做 hotfix 时,先在 dev 分支
git diff > current.patch git reset --hard 等修复完切回 dev 分支 patch < current.patch |
16
randyzhao 2018-07-31 12:01:32 +08:00 1
我都是先 commit -am 先
再回来的时候 reset --soft HEAD^ |
18
xmadi 2018-07-31 12:05:30 +08:00 via iPhone
先 commit 切到另外一个分支改 改完再切回来 reset 到之前的已经上
|
19
falcon05 2018-07-31 12:10:26 +08:00
还是开个分支吧
|
22
ylsc633 2018-07-31 13:39:41 +08:00
为了避免出现问题!
要临时切换分支 我一般先 commit 然后直接切换分支,这样代码不会上传,切回来也不会出错! 不好的地方 就是 commit 不太好看... |
23
dobelee 2018-07-31 13:43:49 +08:00 via Android
几乎每一次提交都在用。不过是 gui 自动完成的。
|
24
RyougiShiki 2018-07-31 13:57:39 +08:00
pycharm 自带的 gui 工具每次 pull 时都用,虽然没理解它的作用
|
25
ptrees 2018-07-31 14:08:25 +08:00
不用 stash,太容易出错,都是直接 commit
|
26
AscenZ 2018-07-31 14:16:21 +08:00
一般直接 commit,之后再 rebase 合并 commit 或者用 commit --amend
|
27
drackzy 2018-07-31 14:23:06 +08:00
我一般 Jetbrain 系的 IDE 开两个,项目复制成2个分别打开。要不分支切不过来。一个开发分支用,一个用于临时随便分支。
|
28
wjpdev 2018-07-31 17:23:46 +08:00
IDEA 下方 Local Changes 文件右键 Shelve changes 可以解决这个问题。
|
29
hqdmy 2018-07-31 17:32:33 +08:00
经常 stash
|
30
daemonghost 2018-07-31 18:11:28 +08:00
```
> git stash --include-untracked # 将新添加的文件也暂存起来 > git checkout -b new_branch ``` |
31
tyrealgray 2018-07-31 18:21:48 +08:00 via Android
经常用
|
32
focux 2018-07-31 18:27:53 +08:00
每次提交前必用,不然怎么把 remote 端的代码 pull 下来。
|
33
ShineSmile 2018-07-31 19:02:35 +08:00
很好用,经常用。
|
34
ai277014717 2018-07-31 19:12:32 +08:00
用的多,GUI 很好用
|
35
thinker3 2018-07-31 19:21:24 +08:00
面试题之一
|
36
icylogic 2018-07-31 19:40:01 +08:00 via iPhone
其实在服务器的 gitlab 上看就挺好的。。。本地主要还是需要修改和调试。
|
37
du5t6reak 2018-07-31 22:20:01 +08:00
用啊,不过还原的时候不要用 git stash pop 这个如果有冲突的话,stash 的代码是不会保存的。
用 git stash apply stash@{} |
38
MrBearin 2018-07-31 22:26:30 +08:00
偶尔
|
39
tonyzzp 2018-07-31 22:37:41 +08:00 via Android
我一般是在更新代码的时候,如果和我本地修改有冲突,但我目前又不想提交我的代码,这时我会用 stash 然后 pull,再 stash pop 继续 写代码。
|
40
randyzhao 2018-07-31 22:43:59 +08:00
|
41
renothing 2018-07-31 23:06:21 +08:00
先 commit,后面切回去继续改了后--amend 追加提交。
|
42
leafiy 2018-07-31 23:14:45 +08:00
amend 正解
|
43
johnnie502 2018-07-31 23:25:15 +08:00
直接 commit 一个 temp,那边弄完以后回来再 reset HEAD~1
|
44
tomato3 2018-07-31 23:51:23 +08:00
```
git stash -k git pull git stash pop ``` |
45
twistedmeadows 2018-08-01 00:59:06 +08:00 via Android 1
可能你需要再多了解下 reset 和 rebase 那些操作的细节。
例如 reset --hard、reset --soft 我不怎么用 stash,要临时切 branch 的时候都是先顺手 commit -a。这种 commit 我不会认真地写内容,只填 tmp save 之类的,下次切回来就知道当前 commit 只是这个 branch 下的临时存档。 等到当前 branch 上工作做完的时候,再 reset 回上一个正式的 commit 点,然后重新填写提交。 这样每个 branch 完成开发的时候都是整洁的,确保每次 commit 都是一次逻辑上独立的改动的话,还可以方便地回退和 cherry-pick。在开发过程中又足够敏捷,可以同时有多个 branch 处于施工状态——不过我在开太多 branch 时会主动意识到当前这个状态是很差的,会跟 leader 沟通工作分配的问题。 小心得就是:commit 是无痛的,可以积极使用 commit。 甚至,在 git 里除了 hard reset 这种破坏性操作,大多数操作都是可逆和无痛的。 |
46
zhilincom 2018-08-01 01:59:35 +08:00 via Android
我都是每次 stash 的时候加上描述信息和时间信息,还原环境的时候就使用 apply,不用 pop。
|
47
weixiangzhe 2018-08-01 02:16:08 +08:00 via iPhone 1
建议 git work tree
|
48
msg7086 2018-08-01 05:05:42 +08:00
Git 的优势就在于 Commit 和 Branch 都是免费的。Stash 我只有在马上要恢复 Working Directory 的时候,比如 Stash+Pull+StashPop 的组合命令,才会用 Stash。其他的时候有 Commit 为啥要用实现相同但更难用的 Stash 呢。
Feature branch 和 WIP commit 都是好东西。 |
49
houskii 2018-08-01 11:37:43 +08:00
commit 和 amend 都有 reflog 可以挽救,stash 如果误 pop 或者删了就很蛋疼了
好吧,其实还是因为我之前有一次从 A 切到 B 然后 stash 了,在 B 开发了很久切回 A 的时候已经忘记了 stash pop 这回事,导致又重新开发了一遍,然后开发快结束了才想起来,从此就不用 stash 了。。。 |
50
tt67wq 2018-08-01 11:49:47 +08:00
无情资本家拿人当畜生使,一个人好多个任务并行,经常要 stash 切其他分支
|
51
kuro1 2018-08-01 14:10:43 +08:00
=。= 一个人同时处理好几个 branch...
|