github: reset 与 rebase, pull 与 fetch 的区别

reset 与 rebase

完全不同的两个命令.reset的意思是回退你的代码到某一个具体的版本,rebase是指回退你个commit到某一次commit. git-reset 会修改 .git/refs 目录和 .git/index 文件. 但它不会修改任何和你的 commit 相关的东西. git-rebase 则会试图去修改你已经 commit 的东西, 比如想要覆盖你的 commit 历史之类的. 但是千万不要用 rebase 来修改已经 push 过的内容, 否则可能导致 rebase 修改过的内容和原先的内容完全不兼容, 然后影响到别人的代码.

也就是说你可以用这个工具: interactive rebasing. 在终端输入 git rebase -i 262d1f7看到输出如下:

pick 262d1f7 Added HTML header (v1)
pick a006669 Oops, we didn't want this commit
pick a6faf60 Revert "Oops, we didn't want this commit"
pick b7b5fce This reverts commit a6faf60631b5fbc6ee79b52a1bdac4c971b69ef8.
pick cdb39b0 Commit p tags with text (v1.1)
pick 9b2f3ce Added an author comment
pick 55649c3 Add an author/email comment
pick 0b1dd4c Moved hello.html to lib
pick 5854339 Added index.html
pick 801e13e Added README
pick a6792e4 Added css stylesheet
pick 17a64df Hello uses style.css (HEAD, origin/style, master),

这样你不想要的 commit 就被删掉了. 但是如果你已经 push 过这些 commit, 那就不要再跑 rebase 了. 其实有这些行在 commit 记录里面也无所谓.

rebase 还有一个功能是解决内容冲突的. 就是说你当前的 working directory 里面的内容它不是最新的, 有人修改了一个文件, 放到 remote 上面去, 好死不死的你也改了这个文件的同一个地方. 这时候你发现有个 pull 更新, 你要从 remote 上面把这个更新 pull 下来. 那 pull 是有自动 merge 的功能的, 问题在于现在 merge 是肯定要失败的, 因为别人和你修改了同一个文件的同一块代码. 这时候, 你需要把自己的 working directory rebase 到服务器上的最新版本, 然后修改冲突, 再把你自己的修改 push 上去. 

从日常的用法来说呢, 如果你碰到了某个 PROD issue, 这个 issue 很可能只有 PROD 那个版本有, 那么你想退回到那个版本,你就用reset命令来做。他会回退你的本地代码到某一个指定的版本,但是你的commit历史完全不会被影响的。

那另外一种情况就是,你从master签出了一个branch, 然后自己很开心的在那修改。这时候别的人会把他的修改merge到master里面啊,那意味着你现在这个branch的版本后落后于master,这时候你肯定不想重新从master签出一个branch进行开发吧,你更愿意把自己的branch刷新到master的最新版本上去,这时候就可以用rebase命令来做了。

pull 与 fetch

简单说来, git pull = git fetch + git merge. 事实上, git pull 是 git fetch; git merge FETCH_HEAD 两个命令合并后的简写方式, 类似语法糖的东西.

你可以在任意时刻用 git fetch 更新对于服务器上的分支的版本的跟踪信息: .git/refs/remotes/<remote>/. 它不会修改你本地的任何分支的内容refs/heads, 所以也不会改动你 working directory 里面的东西. 

git pull 会更新你本地代码到服务器上对应分支的最新版本, 当然也会更新跟踪信息: .git/refs/remotes/<remote>/.

Git 文档: git pull


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux服务器上遇到无法连接到GitHub.com的问题,可能是由于网络连接问题或防火墙设置导致的。以下是一些可能的解决方法: 1. 检查网络连接:确保服务器的网络连接正常,并且可以访问其他网站。可以尝试使用ping命令来测试与GitHub.com的连接是否正常。例如: ```shell ping github.com ``` 2. 检查防火墙设置:如果服务器上启用了防火墙,可能需要允许对GitHub.com的访问。可以使用iptables命令来查看和修改防火墙规则。例如,如果使用的是iptables防火墙,可以运行以下命令来允许对GitHub.com的访问: ```shell sudo iptables -A OUTPUT -p tcp -d github.com --dport 443 -j ACCEPT ``` 3. 检查代理设置:如果服务器使用了代理服务器进行网络连接,需要确保代理设置正确并且可以连接到GitHub.com。可以通过设置http_proxy和https_proxy环境变量来配置代理。例如: ```shell export http_proxy=http://proxy.example.com:8080 export https_proxy=http://proxy.example.com:8080 ``` 4. 检查DNS设置:如果服务器的DNS设置不正确,可能无法解析GitHub.com的域名。可以尝试使用nslookup命令来检查域名解析是否正常。例如: ```shell nslookup github.com ``` 5. 尝试使用其他协议:如果无法使用HTTPS协议连接到GitHub.com,可以尝试使用SSH协议进行克隆或推送。可以在GitHub上的仓库页面上找到SSH克隆URL。例如: ```shell git clone git@github.com:username/repo.git ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值