neevek 最近的时间轴更新
neevek

neevek

V2EX 第 11656 号会员,加入于 2011-09-07 11:39:32 +08:00
根据 neevek 的设置,主题列表被隐藏
二手交易 相关的信息,包括已关闭的交易,不会被隐藏
neevek 最近回复了
2014-10-24 21:59:44 +08:00
回复了 gongzili456 创建的主题 程序员 你们如何写博客?
我想用 github pages 写博客,所以就写了个静态网站生成器: https://github.com/neevek/minerl
2014-06-27 00:35:29 +08:00
回复了 gorsky 创建的主题 奇思妙想 想抢一个好的域名, 还要很有钱才行.
2014-06-18 00:15:42 +08:00
回复了 skydiver 创建的主题 Linux Debian/Ubuntu 真的不适合做服务器操作系统吗?
Debian就是用来做服务器的。。。。。
2014-06-15 13:35:29 +08:00
回复了 qq529633582 创建的主题 git 在第一个能使的版本之前,大家都是如何 git commit 的呢?
我自己的一个简单的原则:保持每个commit是完整的、原子的、可以用一句话描述的。
2014-06-09 18:52:21 +08:00
回复了 Yo_oY 创建的主题 git git push -f 了之后有后悔药可以吃么
可以有些补救方法,首先要找到那个有原来upstream上最新提交的人,让他执行下面这组命令:

方法1:
如果只有两个人(包括你自己):
git fetch origin develop
git checkout develop
git rebase --onto origin/develop SHA1_CULPRIT develop
git push origin develop

方法2:
如果多于两个人(包括你自己):
git fetch origin develop
git checkout develop
git cherry-pick SHA1_CULPRIT^..origin/develop
(这时候如果有冲突则解决冲突后执行git add .; git cherry-pick --continue)
git push -f origin master

对于方法2,确保在执行git push -f的时候其他人没有在做push。

注:SHA1_CULPRIT就是上次你跟upstream同步之后提交的第一个commit的sha1 hash。


最后一个提醒,99%的场景下,你不需要push --force。如果你没有100%确认自己在做什么,没有100%把握知道怎么解决问题,最好别尝试force push。
2014-06-07 09:44:47 +08:00
回复了 yueyoum 创建的主题 程序员 又是一个 GIT 问题
发现不能编辑回复。。。只能再写一个回复更正上一个回复了。

前面关于HEAD~0的描述是错误的(最后3段),HEAD~0在这里实际上exclusive的,也就是HEAD~N往回数N个commit(这里HEAD~0就是0个commit,即完全忽略),然后对这些commit生成patch,replay到origin/master上,所以下面这个命令的意思是:完全忽略在C上面的从HEAD数到与B的common ancestor的位置的所有commit,楼主的情况就只有那个删除file.txt的commit,然后replay到origin/master上面,最终结果就是把B那个checkout回file.txt的commit合并回来了,丢掉已在C上面的删除file.txt的commit。

git rebase --onto origin/master HEAD~0 master
2014-06-07 01:18:32 +08:00
回复了 yueyoum 创建的主题 程序员 又是一个 GIT 问题
根据你的描述不应该会出现aleady up-to-date。

如果B的log是:
ccccccc
|
bbbbbbb

C的log是:
aaaaaaa
|
bbbbbbb

意味着这时候B和C的common ancestor是bbbbbbb,也就是当C从B pull的时候不是fast-forward,原来A提交的aaaaaaa会被当成是C提交的,换言之,文件(假设文件名为file.txt)是在C中被删除的,A没有对file.txt做任何修改。这时候merge B和C最终会导致file.txt文件被删除,并且会产生一个merge commit,这个时候C的log应该是这样的:
Merge commit
|
ccccccc
|
aaaaaaa
|
bbbbbbb

楼主没有直接问问题,我假设楼主希望C跟B合并之后,C中的file.txt没被删除。假设当前在C,这时候需要执行以下命令(执行命令之前,如果你已经执行过git merge或者不带任何参数的git pull,那请回退到合并之前的历史,如:git reset --hard HEAD@{1}):

注:假设upstream是origin,分支名是master

git pull --rebase origin master
或者
git fetch origin master
git rebase --onto origin/master HEAD~0 master

上面这两组命令在这个场景下是等价的,但是用下面这一组命令来解释会更加容易理解。
这里第一个参数origin/master表示我想基于origin/master来replay当前分支的commit,这个时候origin/master其实就是B。HEAD~0实际上等价于HEAD,写成HEAD~0只是为了强调我只有当前分支最新1个commit(这个commit就是aaaaaaa)需要replay到origin/master上。最后的master表示rebase的结果是应用到master分支上的,最终的结果就是file.txt回来了,commit历史会变成:
ccccccc
|
bbbbbbb

没错,aaaaaaa不见了,因为rebase origin/master(等价于based on B中的ccccccc)实际上就是拿C中的aaaaaaa和B中的ccccccc做比较,最终发现ccccccc中增加了file.txt,所以保留了file.txt,所以相当于aaaaaaa这个提交神马都没做,所以这个commit就被去除了。

另外,假设在rebase B之前,在C上面做过一次提交,那上面的HEAD~0改成HEAD~1就可以了。


oh, my god....好长
2014-05-08 23:42:25 +08:00
回复了 ChanneW 创建的主题 奇思妙想 公司上班时间把外网禁掉了~~ 研究怎么绕过规则。
留了个CSDN,那你应该是做开发的,这样的公司早点离开吧,留下来只是浪费你的时间。
2014-05-06 22:10:43 +08:00
回复了 sanddudu 创建的主题 程序员 你愿意为你的博客付多少钱?
github pages免费,纯静态网页,http://neevek.net 域名50一年
顺便做个广告,自己写的静态网站生成器: https://github.com/neevek/minerl
工作一年多,你现在最需要的不是技术广度,是技术深度,而所谓的深度往往是基于初入门者所忽略的基础,我见过很多已经工作3、5年的人,很多基础都没搞清楚。比如:各种编码、HashTable的实现、线程安全、HTTP协议、TCP协议。。。。基础打好了,你就可以更深入的学习,再去学习任何其他语言和技术效率会高很多。
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2725 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 10ms · UTC 15:15 · PVG 23:15 · LAX 07:15 · JFK 10:15
Developed with CodeLauncher
♥ Do have faith in what you're doing.