git使用常用
2020-06-05 23:55 youxin 阅读(257) 评论(0) 编辑 收藏 举报git fetch git pull区别:
git pull看起来像git fetch+get merge,但是根据commit ID来看的话,他们实际的实现原理是不一样的。
这里借用之前文献看到的一句话:
不要用git pull,用git fetch和git merge代替它。
git pull的问题是它把过程的细节都隐藏了起来,以至于你不用去了解git中各种类型分支的区别和使用方法。当然,多数时候这是没问题的,但一旦代码有问题,你很难找到出错的地方。看起来git pull的用法会使你吃惊,简单看一下git的使用文档应该就能说服你。
将下载(fetch)和合并(merge)放到一个命令里的另外一个弊端是,你的本地工作目录在未经确认的情况下就会被远程分支更新。当然,除非你关闭所有的安全选项,否则git pull在你本地工作目录还不至于造成不可挽回的损失,但很多时候我们宁愿做的慢一些,也不愿意返工重来。
————————————————
原文链接:https://blog.csdn.net/weixin_41975655/article/details/82887273
git reset--hard HEAD——丢弃自最近提交以来的分阶段和非分阶段更改。
https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting
指定一个不同的提交而不是HEAD来放弃自提交以来的更改。——hard指定丢弃暂存和未暂存的更改。
git reset 加hard不加hard区别:https://blog.csdn.net/chenpuzhen/article/details/92006378
Git冲突:commit your changes or stash them before you can merge.
1.stash
通常遇到这个问题,你可以直接commit你的修改;但我这次不想这样。
看看git stash是如何做的。
git stash
git pull
git stash pop
接下来diff一下此文件看看自动合并的情况,并作出相应修改。
git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。
2.放弃本地修改,直接覆盖之
git reset --hard
git pull
————————————————
原文链接:https://blog.csdn.net/lincyang/article/details/21519333
git checkout --
https://www.jianshu.com/p/285302d1eb73
unstage
带文件参数的reset
上面讲到的git reset实际上不带参数的,如果带上文件参数,那么效果会是怎样的?
- HEAD不会动
- 将那个commit的snapshot里的那个文件放到Index区域中
需要注意的是带文件参数的git reset没有--hard, --soft这两个参数。只有--mixed参数。
下面这两个命令是一样的,都是reset到HEAD上。
git reset file.txt
git reset --mixed HEAD file.txt
这个例子的意义在于,unstage file,仔细想一想是不是这样?当你把一个文件stage到Index区域里后后悔了,那么只需要把Index区域里的这个文件恢复到最近一次commit的状态(也就是HEAD),那就相当于unstage了。
git提交代码时遇到代码库有更新以及本地有更新的解决方法
在多人协作开发时,经常碰到同事把最新修改推送到远程库,你在本地也做了修改,这个时候无论是执行git pull还是执行git push都会提示错误,我的解决方式如下:
先隐藏掉本地的修改,然后执行git pull从代码块拉取最新代码,具体步骤如下:
1.输入 git status 查看本地的修改
2.输入git stash 隐藏掉本地修改
3.输入 git pull 从代码库拉取更新
4.输入 git stash pop stash@{版本号}
5.然后再git add git commit git push 就行了
另外,还有一种情况,因为自己粗心,在git push之前并没有看代码库的提交记录,导致同事做了修改我不知道,但是我已经执行了git add 和 git commit 这个时候怎么撤销掉git commit 呢?我采用的解决方式如下:
1.先复制你本地的项目到另外一个文件夹
2.输入 git log 查看commit日志,找到最新的提交的commit_id
3.输入git reset - -hard commit_id
4.再把刚才的项目复制过来
5.执行 上面的2 3 4 5步骤就可以了
另外需要注意的问题,当我们git pull 时发现本地的修改和远程代码库的修改有冲突,该怎么解决呢?
这个时候,我们可以根据提示来找到冲突的位置,其中Updated upstream 和=====之间的内容就是pull下来的内容,====和stashedchanges之间的内容就是本地修改的内容,需要我们手动进行确认需要怎么合并
Git提交前没更新到最新版本导致Push失败
解决方法:
1,先保存好本地已经commit但还没有push的版本,
2,本地回退到commit大文件的前一版本(在Tower右键菜单中选择reset Head to this),此版本往后的所有本地commit都被抹除了(这就是做步骤1的原因)
3,pull到最新版本,若此时pull失败原因是文件有冲突,将冲突的文件复原,重新pull。
4,将1的东西修改冲突后,重新commit上去
5,push
这样就从版本中抹除了提交失败的纪录。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2013-06-05 转:mysql中key 、primary key 、unique key 与index区别
2013-06-05 CodeIgniter入门案例之简单新闻系统二
2012-06-05 redhat进入shell