Git FAQ
今天有朋友问了我三个问题:
- 策划或者美术可能没有commit前先pull的习惯,先commit上去,然后push不上。Git提醒pull,然后报错,一般除了程序,甚至没使用过Git的程序就有点不知所措了。应该要讲下出错时候要stash的问题。
- 策划pull出错时候, 万一revert,然后push强推,把之前别人提交的东西冲掉了。我们有用过回滚,然后强推上去。可以再讲下怎么强推
- 怎么stash,怎么stash apply,apply失败后怎么弄。commit的顺序最好也要重点强调下
在篇中我会解答,如果还有其他问题 请给我留言,我会追加叙述。求关注 求转发。把爱传出去 笑~
在解答第一个问题之前我们先了解一下什么是 stash (存储) (非程序人员跳过此条说明)
What does “commit your changes or stash them” mean?
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 简单理解就是备份本地修改,且可以备份多次。什么?又冲突了?用Stash啊!
演示-使用commit来规避文件修改被冲掉
我们假设有两个人正在操作同一份文件 README.md
。
A君 : 我已经提交此文件的修改了,你更新下。
B君 : 我先Fetch看看有,然后我上传。嗯?冲突了。我并不知道你修改了什么个文件,我也不想在同步的时候把本地的修改冲掉。 那我提前 commit
这些个文件吧。
commit 简单理解就是保存本次修改,且可以被追溯。什么你只会Stash?直接commit也行啊!
如何强推?
理解了上面的之后。发现 用Stash 或者Commit都可以实现强推。
现在点击pull/或者Apply Stash 处理好,上传吧。
出了莫名其妙的问题如何补救?
有些朋友一看到一堆报错和本地紊乱的修改就慌了。别怕 可以直接回到存档(commit)点去复活。
本文标题:Git FAQ
文章作者:Keyle
发布时间:2017-12-02
最后更新:2024-08-20
原始链接:https://vrast.cn/posts/1e42cd7e/
版权声明:©Keyle's Blog. 本站采用署名-非商业性使用-相同方式共享 4.0 国际进行许可