我每次开发的时候用的 git 命令流程如下:
可是,这样做的话我居然可以在自己的 merge request 中看到别人的 commit。但是如果我改用git pull
来同步代码的话,然后再 coding,然后推到远端,就只会看到我自己的 commit。按照我的理解,git pull
不是等于 git fetch && git merge
吗,为什么会有这么大的区别呢?希望理解的老铁解答下,多谢,多谢!
ps:我们公司使用的 gitlab,在 GitHub 中应该叫 pull request 好像。
1
siteshen 2019-07-18 12:59:43 +08:00
执行 `git merge origin/master` 后,master 中的新代码就到你的分支了,你可以用 `git log` 在你的分支下看看 commit 历史来确认这一点( git difif origin/master 应该也能看到其他 commit 的代码)。
我用的方案是(注意,因为 rebase 会改变 commit 历史,所以只适用没有共享分支的情况): git fetch git checkout feature/impl-login git rebase origin/master # git push origin -f feature/impl-login # 警告⚠️请搞清楚 -f 的含义再使用 然后 `git log` 查看,就只有自己的 commit,冲突(如果有)在 rebase 过程中解决。 |
2
airect 2019-07-18 14:39:36 +08:00
因为目标分支未包含别人的 commit,而你的包含了😂
|
3
Weixiao0725 OP @airect 应该不是,因为我在 Changes 里只能看我的文件改变,看不到其他人的。
|
5
wuchujie 2019-07-18 16:49:58 +08:00
@siteshen 请教一下 比如我线上本身我线上分支是
线上 master 比如 commit 记录是 20190718 在此基础上 我在本地开新分支 feature-A 然后开发完[推测试服务器部署] push 到 git 线上 feature-A 的 commit 记录是 20190719 线上 master 现在有个修改 commit 记录是 20190720 20190718 现在 feature-A 还有办法 rebase 吗 |
6
siteshen 2019-07-18 19:34:58 +08:00
@wuchujie 只要没有未 commit 的代码,rebase 随时都可以执行的,过程如下:
git fetch # 保证本地有远端的 master 代码 git checkout feature-A git rebase origin/master rebase 成功后,`git log` 的结果应该是这样: 20190719 20190720 20190718 另外,建议对 git 不那么熟悉的同学,在测试时可以复制所有目录(和文件),在副本中测试。这样即使操作失败了,也不会有什么影响。另外一个建议是,遇到出现不太确定的情况时,尽早找熟悉 Git 的同事查看。 |
7
hantsy 2019-09-15 15:10:03 +08:00
个人只喜欢 Merge,不用 Rebase。
Merge 可以保留整个 Git 最原始的提交的树形结构。Rebase 将这种结构修改了,拉直了。 |