git push到远程分支问题 我完全不会

用户“刺激”对问题“如何实现递归Git push/pull?”的回答 - 问答 - 云+社区 - 腾讯云我有一个包含其他git存储库的git存储库。是否有递归推送和/或拉的命令不仅用于元存储库,而且用于子存储库?写回答邀请回答如何实现递归Git push/pull?写回答你可以参考:回答过的其他问题“$‘String’”形式中的单词以一种特殊的方式处理。该单词扩展为字符串,反斜杠转义字符替换为ANSI-C标准指定的字符。反斜杠转义序列可在Bash文档中找到。我想这迫使脚本将行提要转义到正确的ANSI-C标准。他们使用ip地理定位的组合,并对附近无线网络的扫描结果与其侧的数据库进行比较(当android手机用户使用gps时,通过收集gps坐标和wifi扫描数据来建立该数据库)。 代码: extension CALayer {
func addBorder(edge: UIRectEdge, color: UIColor, thickness: CGFloat) {
var border = CALayer()
switch e......
事实证明,我需要gulp-rename在'uglification'之前先使用并输出连接文件。代码如下: var gulp = require('gulp'),
gp_concat = require('gulp-concat'),
gp_rename = re......
你可以试试这个: shake.xml: &translate xmlns:android=&http://schemas.android.com/apk/res/android&
android:fromXDelta=&0&
使用clearTimeout()并提供setTimeout的引用,这将是一个数字。然后重新调用它:
function invocation() {
alert('invoked')
initial = window.setTimeou...... 暂无个人信息博客分类:
在版本库的SSH方式和HTTPS方式是不同的,具体来说就是url信息的不同,但是,实际的认证机制也是不同的。当建立了本机密钥之后,使用ssh方式实际上是不需要再次认证的,而https则每次需要输入密码 。《Help.GitHub - SSH key passphrases》里也说了用SSH更方便更安全,不需要去输入长长的密码。我去看了下repo目录下的.git/config,果然,我的url是HTTPS形式。
[remote "origin"]
fetch = + refs/heads/*:refs/remotes/origin/*
url = https:///username/projectname.git
因为远程版本库的url是HTTPS,估计是我git clone的时候用HTTPS链接造成的所以问题就出在这了,每次都很不方便,都要输入用户名和密码。为了使用SSH公钥的方式认证,我把config的url改成下面这样
[remote "origin"]
fetch = + refs/heads/*:refs/remotes/origin/*
url = :username/projectname.git
这样我git push的时候又可以用SSH公钥认证而不用去输入用户名和密码,不仅方便,而且更安全。
浏览: 1588949 次
来自: 杭州
,默认是netty还是hassion?
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
不错,谢谢!
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'git reset后导致git push需要加-f的问题_百度知道
git reset后导致git push需要加-f的问题
打入a补丁,commit后push到服务器,发现a补丁没有完全解决问题,reset掉后打入正确的补丁,commit没问题,push到服务器的时候需要加-f,强制覆盖服务器端的代码。有没有办法在使用reset的同时不需要强制覆盖服务器端的代码?
或者在git push -f后会对软件代码集成人员带去什么麻烦?
我有更好的答案
打入正确补丁,PUSH -F到服务器,就会把刚才HEAD的节点1-A删除掉打入补丁A,COMMIT后PUSH到服务器,这时候HEAD是节点1-A。Reset后,变成2-A了。问题是:如果有人在你节点1-A的时候PULL了,然后你把1-A删除换成了2-A,下次再PULL的时候,变成1-B,然后用rebase -i 把两个commit merge到一起就可以了,因为他是有节点1-A的,那就会出现冲突。最正确的解决方法是,在1-A的节点上,再打一次补丁
采纳率:78%
不能,之前的a已经push到服务器了。
为您推荐:
其他类似问题
git的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。如何在 Git 里撤销(几乎)任何操作 - 文章 - 伯乐在线
& 如何在 Git 里撤销(几乎)任何操作
任何版本控制系统的一个最有的用特性就是“撤销 (undo)”你的错误操作的能力。在 Git 里,“撤销” 蕴含了不少略有差别的功能。
当你进行一次新的提交的时候,Git 会保存你代码库在那个特定时间点的快照;之后,你可以利用 Git 返回到你的项目的一个早期版本。
在本篇博文里,我会讲解某些你需要“撤销”已做出的修改的常见场景,以及利用 Git 进行这些操作的最佳方法。
撤销一个“已公开”的改变
场景: 你已经执行了 git push, 把你的修改发送到了 GitHub,现在你意识到这些 commit 的其中一个是有问题的,你需要撤销那一个 commit.
方法: git revert &SHA&
原理: git revert 会产生一个新的 commit,它和指定 SHA 对应的 commit 是相反的(或者说是反转的)。如果原先的 commit 是“物质”,新的 commit 就是“反物质” — 任何从原先的 commit 里删除的内容会在新的 commit 里被加回去,任何在原先的 commit 里加入的内容会在新的 commit
里被删除。
这是 Git 最安全、最基本的撤销场景,因为它并不会改变历史 — 所以你现在可以
git push 新的“反转” commit 来抵消你错误提交的 commit。
修正最后一个 commit 消息
场景: 你在最后一条 commit 消息里有个笔误,已经执行了 git commit -m "Fxies bug #42",但在 git push 之前你意识到消息应该是 “Fixes bug #42″。
方法: git commit --amend 或 git commit --amend -m "Fixes bug #42"
原理: git commit --amend 会用一个新的 commit 更新并替换最近的 commit ,这个新的 commit 会把任何修改内容和上一个 commit 的内容结合起来。如果当前没有提出任何修改,这个操作就只会把上次的 commit 消息重写一遍。
撤销“本地的”修改
场景: 一只猫从键盘上走过,无意中保存了修改,然后破坏了编辑器。不过,你还没有 commit 这些修改。你想要恢复被修改文件里的所有内容 — 就像上次 commit 的时候一模一样。
方法: git checkout -- &bad filename&
原理: git checkout 会把工作目录里的文件修改到 Git 之前记录的某个状态。你可以提供一个你想返回的分支名或特定 SHA ,或者在缺省情况下,Git 会认为你希望 checkout 的是 HEAD,当前 checkout 分支的最后一次 commit。
记住:你用这种方法“撤销”的任何修改真的会完全消失。因为它们从来没有被提交过,所以之后 Git 也无法帮助我们恢复它们。你要确保自己了解你在这个操作里扔掉的东西是什么!(也许可以先利用 git diff 确认一下)
重置“本地的”修改
场景: 你在本地提交了一些东西(还没有 push),但是所有这些东西都很糟糕,你希望撤销前面的三次提交 — 就像它们从来没有发生过一样。
方法: git reset &last good SHA& 或 git reset --hard &last good SHA&
原理: git reset 会把你的代码库历史返回到指定的 SHA 状态。 这样就像是这些提交从来没有发生过。缺省情况下, git reset 会保留工作目录。这样,提交是没有了,但是修改内容还在磁盘上。这是一种安全的选择,但通常我们会希望一步就“撤销”提交以及修改内容 — 这就是 --hard 选项的功能。
在撤销“本地修改”之后再恢复
场景: 你提交了几个 commit,然后用 git reset --hard 撤销了这些修改(见上一段),接着你又意识到:你希望还原这些修改!
方法: git reflog 和 git reset 或 git checkout
原理: git reflog 对于恢复项目历史是一个超棒的资源。你可以恢复几乎 任何东西 — 任何你 commit 过的东西 — 只要通过 reflog。
你可能已经熟悉了 git log 命令,它会显示 commit 的列表。 git reflog 也是类似的,不过它显示的是一个 HEAD 发生改变的时间列表.
一些注意事项:
它涉及的只是 HEAD 的改变。在你切换分支、用 git commit 进行提交、以及用 git reset 撤销 commit 时,HEAD 会改变,但当你用
git checkout -- &bad filename& 撤销时(正如我们在前面讲到的情况),HEAD 并不会改变 — 如前所述,这些修改从来没有被提交过,因此 reflog 也无法帮助我们恢复它们。
git reflog 不会永远保持。Git 会定期清理那些 “用不到的” 对象。不要指望几个月前的提交还一直躺在那里。
你的 reflog 就是你的,只是你的。你不能用 git reflog 来恢复另一个开发者没有 push 过的 commit。
那么…你怎么利用 reflog 来“恢复”之前“撤销”的 commit 呢?它取决于你想做到的到底是什么:
如果你希望准确地恢复项目的历史到某个时间点,用 git reset --hard &SHA&
如果你希望重建工作目录里的一个或多个文件,让它们恢复到某个时间点的状态,用 git checkout &SHA& -- &filename&
如果你希望把这些 commit 里的某一个重新提交到你的代码库里,用 git cherry-pick &SHA&
利用分支的另一种做法
场景: 你进行了一些提交,然后意识到你开始 check out 的是 master 分支。你希望这些提交进到另一个特性(feature)分支里。
方法: git branch feature, git reset --hard origin/master, and git checkout feature
原理: 你可能习惯了用 git checkout -b &name& 创建新的分支 — 这是创建新分支并马上 check out 的流行捷径 — 但是你不希望马上切换分支。这里, git branch feature 创建一个叫做 feature 的新分支并指向你最近的 commit,但还是让你 check out 在 master 分支上。
下一步,在提交任何新的 commit 之前,用 git reset --hard 把 master 分支倒回 origin/master 。不过别担心,那些 commit 还在 feature 分支里。
最后,用 git checkout 切换到新的 feature 分支,并且让你最近所有的工作成果都完好无损。
及时分支,省去繁琐
场景: 你在 master 分支的基础上创建了 feature 分支,但 master 分支已经滞后于 origin/master 很多。现在 master 分支已经和 origin/master 同步,你希望在 feature 上的提交是从现在开始,而不是也从滞后很多的地方开始。
方法: git checkout feature 和 git rebase master
原理: 要达到这个效果,你本来可以通过 git reset (不加 --hard, 这样可以在磁盘上保留修改) 和 git checkout -b &new branch name& 然后再重新提交修改,不过这样做的话,你就会失去提交历史。我们有更好的办法。
git rebase master 会做如下的事情:
首先它会找到你当前 check out 的分支和 master 分支的共同祖先。
然后它 reset 当前
check out 的分支到那个共同祖先,在一个临时保存区存放所有之前的提交。
然后它把当前 check out 的分支提到 master 的末尾部分,并从临时保存区重新把存放的 commit 提交到 master 分支的最后一个 commit 之后。
大量的撤销/恢复
场景: 你向某个方向开始实现一个特性,但是半路你意识到另一个方案更好。你已经进行了十几次提交,但你现在只需要其中的一部分。你希望其他不需要的提交统统消失。
方法: git rebase -i &earlier SHA&
原理: -i 参数让 rebase 进入“交互模式”。它开始类似于前面讨论的 rebase,但在重新进行任何提交之前,它会暂停下来并允许你详细地修改每个提交。
rebase -i 会打开你的缺省文本编辑器,里面列出候选的提交。如下所示:
前面两列是键:第一个是选定的命令,对应第二列里的 SHA 确定的 commit。缺省情况下, rebase -i
假定每个 commit 都要通过
pick 命令被运用。
要丢弃一个 commit,只要在编辑器里删除那一行就行了。如果你不再需要项目里的那几个错误的提交,你可以删除上例中的1、3、4行。
如果你需要保留 commit 的内容,而是对 commit 消息进行编辑,你可以使用 reword 命令。 把第一列里的 pick 替换为 reword (或者直接用 r)。有人会觉得在这里直接重写 commit 消息就行了,但是这样不管用 —rebase -i 会忽略 SHA 列前面的任何东西。它后面的文本只是用来帮助我们记住 0835fe2 是干啥的。当你完成 rebase -i 的操作之后,你会被提示输入需要编写的任何 commit 消息。
如果你需要把两个 commit 合并到一起,你可以使用 squash 或 fixup 命令,如下所示:
squash 和 fixup 会“向上”合并 — 带有这两个命令的 commit 会被合并到它的前一个 commit 里。在这个例子里, 0835fe2 和 6943e85 会被合并成一个 commit, 38f5e4e 和 af67f82 会被合并成另一个。
如果你选择了 squash, Git 会提示我们给新合并的 commit 一个新的 commit 消息; fixup 则会把合并清单里第一个 commit 的消息直接给新合并的 commit 。 这里,你知道 af67f82 是一个“完了完了….” 的 commit,所以你会留着 38f5e4e as的 commit 消息,但你会给合并了 0835fe2 和 6943e85 的新 commit 编写一个新的消息。
在你保存并退出编辑器的时候,Git 会按从顶部到底部的顺序运用你的 commit。你可以通过在保存前修改 commit 顺序来改变运用的顺序。如果你愿意,你也可以通过如下安排把 af67f82 和 0835fe2 合并到一起:
修复更早期的 commit
场景: 你在一个更早期的 commit 里忘记了加入一个文件,如果更早的 commit 能包含这个忘记的文件就太棒了。你还没有 push,但这个 commit 不是最近的,所以你没法用 commit --amend.
方法: git commit --squash &SHA of the earlier commit& 和 git rebase --autosquash -i &even earlier SHA&
原理: git commit --squash 会创建一个新的 commit ,它带有一个 commit 消息,类似于 squash! Earlier commit。 (你也可以手工创建一个带有类似 commit 消息的 commit,但是 commit --squash 可以帮你省下输入的工作。)
如果你不想被提示为新合并的 commit 输入一条新的 commit 消息,你也可以利用 git commit --fixup 。在这个情况下,你很可能会用commit --fixup ,因为你只是希望在 rebase 的时候使用早期 commit 的 commit 消息。
rebase --autosquash -i
会激活一个交互式的 rebase 编辑器,但是编辑器打开的时候,在 commit 清单里任何 squash! 和 fixup! 的 commit 都已经配对到目标 commit 上了,如下所示:
在使用 --squash 和 --fixup 的时候,你可能不记得想要修正的 commit 的 SHA 了— 只记得它是前面第 1 个或第 5 个 commit。你会发现 Git 的 ^ 和 ~ 操作符特别好用。HEAD^ 是 HEAD 的前一个 commit。 HEAD~4 是 HEAD 往前第 4 个 – 或者一起算,倒数第 5 个 commit。
停止追踪一个文件
场景: 你偶然把 application.log 加到代码库里了,现在每次你运行应用,Git 都会报告在 application.log 里有未提交的修改。你把 *.login 放到了 .gitignore 文件里,可文件还是在代码库里 — 你怎么才能告诉 Git “撤销” 对这个文件的追踪呢?
方法: git rm --cached application.log
原理: 虽然 .gitignore 会阻止 Git 追踪文件的修改,甚至不关注文件是否存在,但这只是针对那些以前从来没有追踪过的文件。一旦有个文件被加入并提交了,Git 就会持续关注该文件的改变。类似地,如果你利用 git add -f 来强制或覆盖了 .gitignore, Git 还会持续追踪改变的情况。之后你就不必用-f
来添加这个文件了。
如果你希望从 Git 的追踪对象中删除那个本应忽略的文件, git rm --cached 会从追踪对象中删除它,但让文件在磁盘上保持原封不动。因为现在它已经被忽略了,你在
git status 里就不会再看见这个文件,也不会再偶然提交该文件的修改了。
这就是如何在 Git 里撤销任何操作的方法。要了解更多关于本文中用到的 Git 命令,请查看下面的有关文档:
打赏支持我翻译更多好文章,谢谢!
打赏支持我翻译更多好文章,谢谢!
任选一种支付方式
关于作者:
可能感兴趣的话题
好好学git了
关于伯乐在线博客
在这个信息爆炸的时代,人们已然被大量、快速并且简短的信息所包围。然而,我们相信:过多“快餐”式的阅读只会令人“虚胖”,缺乏实质的内涵。伯乐在线内容团队正试图以我们微薄的力量,把优秀的原创文章和译文分享给读者,为“快餐”添加一些“营养”元素。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2018 伯乐在线git使用时候遇到的几个问题 - 简书
git使用时候遇到的几个问题
这几个问题是在git push时候遇到的,特地记录下来,以防再次入坑啊!
先来梳理下 push时候的 详细步骤(我就是因为刚来时忘了其中的一两步才出来的问题,按照这个来,不会有事的)。
说明下情况:我在服务器有一个master主分支,用来放稳定的代码,一个develop分支,用来开发新功能,master上的代码是上线代码,稳定的,develop分支上的 代码经过测试没问题才可以合并到master。
本地同样有两个分支,一个是在服务端master分支上 clone下来的 本地master分支,一个是进件的myDevelop分支,一般在myDevelop分支上进行开发。出了问题进行回滚,不会影响本地的主分支。
现在我在本地myDevelop分支上写好代码,想要提交到服务器develop分支(不能直接提交到服务器master分支,切记),具体步骤如下:
git add . 提交到暂存区,
git commit -m
本地仓库的操作。
这时候是不能直接push的 ,因为还没有合并,如果push了 就汇报下面第一个错误,我们需要git checkout master 切换到本地主分支,
git meger myDevelop 将本地myDevelop分支上的代码合并到本地主分支。这样才能push上去,
git push origin master:develop 将本地的master分支push到服务器develop分支上去(一般push之前需要 pull一下或者fetch 一下更新一下代码,这个看个人情况)
1. 提示 Everything up - to- date
出这个问题,百度 谷歌出来的百分之九十都是说的驴头不对马嘴,根本解决不了问题。。。。,错误原因上面说了。
2.error: src refspec develop does not match any.
这个问题也是在上面要用到的。原因还是因为没有合并本地分支造成的。。。
3.push的时候提示failed to push some refs to '
解决办法,先pull 一下,跟远程仓库同步,然后再push 即可
git pull --rebase origin master
从事iOS、前端和部分产品工作,热爱学习新技术!希望能和大家一起交流学习,转载文章请注明出处,谢谢!
Git全面教程 简介 Git分布式版本管理系统。 Linus在1991年创建了开源的Linux,但是一直没有一个合适的版本管理工具,在2002年以前,世界各地的志愿者都是通过把源代码文件通过diff的方式给Linus,然后他本人通过手工的方式进行合并代码。后来在2002年B...
个人在学习git工作流的过程中,从原有的 SVN 模式很难完全理解git的协作模式,直到有一天我看到了下面的文章,好多遗留在心中的困惑迎刃而解,于是我将这部分资料进行整理放到了github上,欢迎star查看最新更新内容, https://github.com/xirong...
每个团队的开发流程各式各样,在工作中如何运用好git并不轻松。这个章节就尝试探究一下在公司团队中最最常用的git工作流。 在你阅读的时候,记住这些开发流主要用来做参考,而不是必须严格遵守,我们只是想展示主流的各种开发工作流让你了解,你应该融汇贯通的运用它们,并形成一个适合你...
多种多样的工作流使得在项目中实施Git时变得难以选择。这份教程提供了一个出发点,调查企业团队最常见的Git工作流。 阅读的时候,请记住工作流应该是一种规范而不是金科玉律。我们希望向你展示所有工作流,让你融会贯通,因地制宜。 这份教程讨论了下面四种工作流:1.中心化的工作流2...
学习资料pro gitgit - 简明指南Github官方帮助文档Git Community Book 中文版参考廖雪峰GIT教程Learn Git BranchingGit笔记(一)——[commit, checkout]Git笔记(二)——[diff, reset]Gi...
突然想起来4年前刚刚相识的那个冬天,那个夜晚,我们俩看完了电影,他送我回家,在我家门口,夜黑风高,他也就放肆了起来,一阵激吻之后,我说,不如我们今天我去你那里住吧……姜先生说,不要,你回家吧,都送你回来了……说的正气凛然,衣冠禽兽! 我转身就往楼下跑,然后说,我不要回家,去...
大年三十,黑龙江省哈尔滨市公安局道里分局太平庄派出所民警曲玉权依法处置斗殴事件时,遭到违法犯罪嫌疑人袭击不幸牺牲,年仅38岁。 大年初一,河南省开封市公安局警卫处处长李少杰,积劳成疾,离开了他为之辛勤付出几十年的工作岗位和挚爱的父母妻子女儿。 大年初二,辽宁省铁岭市公安局罗...
我们绝大多数的人,一生都是情绪的奴隶,各种贪、嗔、痴,爱、怨、妒,以物喜,以己悲,甚至,被下半身所驱动,作出许多匪夷所思的事情。面对“求不得”,我们辗转腾挪,痛苦徘徊,七情上面,忍耐、撒泼、绝望、痛悔……种种失态。 我想真正的人生赢家应该是,从来没有这样随波逐流,不管发生任...
1、古来今往多少事,都付笑谈中? 他15岁剃度出家,师从大总持寺著名的萨婆多部学者道岳。 他少怀高蹈之节,容貌俊秀英飒,气宇不凡。 他潜心研究佛法理论,深谙大乘小乘经纶。 他26岁被选入玄奘译场,参与《大唐西域记》的编撰。 他因珍藏皇家金宝神枕,唐太宗大怒邢于腰斩。 他高才...
今天早上在我们的夏季课程学员微信群里分享了一个话题“孩子多好才够好?” 话题的开始是由我讲的关于女儿考四级的故事引起的…… 女儿大一的时候,说的要完成四级英语证书的考试,我也积极地鼓励她争取一次就过。话说当时是看到女儿学习英语的时间好像很少,而且也听不到 她说外语,心里有些...

我要回帖

更多关于 git push 的文章

 

随机推荐