【Git FAQ】-开发者专栏-【游戏蛮牛】-游戏出海,ar增强现实,虚拟现实,unity3d,unity3d教程下载首选u3d,unity3d社区 - Powered by Discuz!
 找回密码
 注册帐号

扫一扫,访问微社区

keyle Git FAQ

0
回复
1141
查看
[ 复制链接 ]
排名
3259
昨日变化

19

主题

173

帖子

1599

积分

Rank: 9Rank: 9Rank: 9

UID
22288
好友
10
蛮牛币
2551
威望
0
注册时间
2014-4-21
在线时间
339 小时
最后登录
2021-3-25

专栏作家

QQ
2021-3-22 20:07:12 显示全部楼层 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
今天有朋友问了我三个问题
  • 策划或者美术可能没有commit前先pull的习惯,先commit上去,然后push不上。Git提醒pull,然后报错,一般除了程序,甚至没使用过Git的程序就有点不知所措了。应该要讲下出错时候要stash的问题。
  • 策划pull出错时候, 万一revert,然后push强推把之前别人提交的东西冲掉了。我们有用过回滚,然后强推上去。可以再讲下怎么强推
  • 怎么stash,怎么stash apply,apply失败后怎么弄。commit的顺序最好也要重点强调下
在篇中我会解答,如果还有其他问题 请给我留言,我会追加叙述。求关注 求转发。把爱传出去 笑~

在解答第一个问题之前我们先了解一下什么是 stash (存储) (非程序人员跳过此条说明)
stash意味着你有未提交的更改,将会在拉取代码的时候防止本地的修改被覆盖。顺便说一句如果你想知道更多关于Git stash 的问题只需要提问:how do I solve the problem where Git tells me to commit or stash (如何解决Git告诉我commit或stash的问题)
通过git stash将工作区恢复到上次提交的内容,同时备份本地所做的修改,之后就可以正常git pull了,git pull完成后,执行git stash pop将之前本地做的修改应用到当前工作区。
git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。
Pull 与 Fetch 区别 (基本概念)
  • 每次commit都会有一个记录。
  • 本地的所有commit在没有push之前,都是存在本地。别人是更新不到你的commit记录的。
  • 所谓更新就是拿到别人的Commit数据。
  • 如果你更新到别人的commit里也有你本次commit修改的数据 就会产生冲突,就需要合并。
  • Pull 的意思是 下载比自己更新的commit数据,并且开始合并,可能马上就有从冲突文件。
  • Fetch 的意思是 下载比自己更新的commit数据,放在那里(不合并到当前commit),可以看看是否有必要更新到最近commit。
先解释下报错信息
你本地的修改和Git存储上的冲突了,现在有两种方式来解决:
  • commit 先提交本地的修改,commit的原因是为了可追溯,通过本地branches就能拿到N+1个版本的修改。防止丢失
  • stash 备份本地的修改 ,仍旧是防止丢失,且可以有多个版本 很灵活
演示-Stash如何使用 规避文件修改被冲掉
我们假设有两个人正在操作同一份文件 README.md 。
A君 : 我已经提交此文件的修改了,你更新下。
B君 : 我先Fetch看看有,然后我上传。嗯?冲突了。我并不知道你修改了什么个文件我也不想在同步的时候把本地的修改冲掉。 那我提前 Stash 这些个文件吧。
机制的B君做了如下操作
Stash了勾选后的将本地修改在这里
B君 : 点击 可将指定的Stash文件与更新后的文件合并。
Stash 简单理解就是备份本地修改且可以备份多次。什么?又冲突了?用Stash啊!
演示-使用commit来规避文件修改被冲掉
我们假设有两个人正在操作同一份文件 README.md 。
A君 : 我已经提交此文件的修改了,你更新下。
B君 : 我先Fetch看看有,然后我上传。嗯?冲突了。我并不知道你修改了什么个文件我也不想在同步的时候把本地的修改冲掉。 那我提前 commit 这些个文件吧。
这个Push Change不用勾选,反正勾选也上传不了但是不影响commit。
现在pull也可以合并本地文件
commit 简单理解就是保存本次修改且可以被追溯。什么你只会Stash?直接commit也行啊!
如何强推?
理解了上面的之后。发现 用Stash 或者Commit都可以实现强推。
现在commit肯定不行 因为被修改过了,sourcetree的机制是 点击按钮 默认commit,然后push
必然是失败的,点击OK现在本地branch已经有了此次commit痕迹了(可追溯)
现在点击pull/或者Apply Stash 处理好,上传吧。
出了莫名其妙的问题如何补救?
有些朋友一看到一堆报错和本地紊乱的修改就慌了。别怕 可以直接回到存档(commit)点去复活。
直接回到某个commit的状态


最后的最后,感兴趣可以follow我的个人站:https://vrast.cn



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

关注游戏蛮牛公众号送vip