有没有办法一条命令可以快速 rebase?

2016-04-21 16:52:32 +08:00
 leonlh

项目用 git 做版本管理,同步代码的时候用的是 git pull --rebase 来保证分支的整洁

然而 rebase 时如果当前有未提交的代码, git 会提示: Cannot rebase: You have unstaged changes.

所以我的操作流程是这样的:

  1. git stash
  2. git pull --rebase
  3. (有冲突解决冲突,然后 git rebase --continue)
  4. git stash pop stash

pull 一个代码,竟然要这么多步骤,简直令人发指。。。 考虑过用 alias 写个命令把这几个命令都加进去,但是如果 rebase 的时候出现冲突就跪了 所以 V2 大神有没有好的方案,能够便捷的 rebase 代码...

8093 次点击
所在节点    git
48 条回复
qdzzyb
2016-04-21 16:55:56 +08:00
commit 就可以吧 就不用 stash 了
neoblackcap
2016-04-21 16:58:27 +08:00
关键就是你拉代码为什么会有这么多冲突?你有冲突当然要人工干预啊。

我的建议就是多执行 git pull --rebase ,你的代码要多分模块,多提交,多 push

冲突多没办法的,什么方案都救不了
leonlh
2016-04-21 17:02:39 +08:00
@qdzzyb 当两个人互相提供接口的时候,都没有开发完功能,所以不还不能 commit
leonlh
2016-04-21 17:03:39 +08:00
@neoblackcap 改相同的地方有时候确实会有冲突...我是想找个有冲突就停止,没冲突就一直走下去的命令写法...
neoblackcap
2016-04-21 17:51:48 +08:00
@leonlh
两个人互相提供接口?循环引用?
而且 rebase 本来就是像你说的一样啊,有冲突才会停止啊,只不过是你多了一步缓存你当前还没完成的内容而已。你像一楼说的 commit 就没事了。不要一个 commit 几千行啊, review 的人都要死了
wittyfox
2016-04-21 17:55:00 +08:00
麻烦是因为你的工作流 /分支管理不合理。
leonlh
2016-04-21 18:01:03 +08:00
@wittyfox
@neoblackcap
情况是这样的,代码没写完,不想 commit ,但是又想 pull 一下保证代码不要太旧,这种情况很多见的吧,比如早上来了 pull 下代码。
我们的确是在 develop 分支上共同开发的,因为确实有需要前后互相提供接口的地方。
neoblackcap
2016-04-21 18:06:02 +08:00
@leonlh
同意 @wittyfox 的话,你们工作流或者分工不合理,要不然怎么会整天出现冲突。
你这样的目前这样操作是合理的,我是看不到有更少的步骤了,你当然可以写 alias ,但只能减少你命令输入的次数而已,出现冲突还是得人工干预, 也就是说你解决了冲突之后当然要 git rebase --continue ,这个步骤是自动不了的,要不然你不输入 git 怎么知道你解决了冲突了呢?
kirisetsz
2016-04-21 18:07:42 +08:00
kirisetsz
2016-04-21 18:09:28 +08:00
并且养成随手 commit 的习惯 (就像 cmd + S 一样)
反正之后可以 rebase -i 回头整理和修改提交,没必要那么好看
leonlh
2016-04-21 18:21:45 +08:00
@neoblackcap 嗯嗯,人工解决冲突确实是必要的,我也只是想找个『没冲突的时候一条命令就过 ,有冲突就停下来人工解决冲突』的办法而已。。
leonlh
2016-04-21 18:22:13 +08:00
@kirisetsz 不错的想法,我试试~
Pastsong
2016-04-21 18:33:02 +08:00
这样要写 bash 脚本了,当有冲突停下来,没冲突继续执行
dorentus
2016-04-21 20:01:06 +08:00
有代码没提交的话 merge/rebase 干嘛?

任何时候都可以 commit 的,反正没 push 到 server 的话本地之后可以随便调整然后再 push 。

都用 git 了,不敢 commit 是不对的……
julyclyde
2016-04-21 21:49:28 +08:00
@kirisetsz 今天我用了 rebase -i 感觉太有用了。只是会产生一些垃圾数据(不在链上的 commit ),心理略不好受……
kiwi95
2016-04-21 22:22:31 +08:00
commit 有什么不敢提交的,不 push 不就可以了, commit 不要省着用。。。 commit 不是要开发完某个功能才做的,基本上什么时候都可以做
owt5008137
2016-04-21 23:14:04 +08:00
除非特别情况不要 rebase , git 最大的特色就是分支管理,动不动就 rebase 就完全失去了这个最重要的功能,那还不如回去用 svn 。
leonlh
2016-04-22 00:31:11 +08:00
@owt5008137 合作并行开发当然有 rebase 的必要了呀
msg7086
2016-04-22 01:53:48 +08:00
@owt5008137 git 最大的特色是分支管理,又不是 merge ,为什么不能动不动就 rebase ?
能频繁 rebase 才能体现出 git 的分支管理特色。
lightening
2016-04-22 03:52:22 +08:00
分布式版本管理的好处就是 commit 和 push 可以分开。所以可以放心大胆的随手 commit 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/273416

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX