Git学习
in 个人博客 on Git
Git真的是太常用了,不会用git真的真的不能算是一个合格的程序员。特地写一篇文章记录开发过程中使用过的git技巧。
没有排版,姑且按照时间顺序记录吧…
分支的使用
先来明确一下,HEAD可以理解为指向当前所显示的代码的“指针”,一般指向分支,标记当前分支所显示的commit。 在使用git log
时,就可以发现(HEAD -> branch-name)
可以指向多个分支。另外,本地仓库和远程仓库(比如GitHub)是两个仓库
一般新创建的的项目,会有一个默认的本地分支master
,还有可能有一个远程分支remote/origin/master
对应远程仓库。使用git branch -a
可以发现本地分支和远程分支名字是不一样的,明显远程分支名会多了“remote/origin”。你可以git checkout remote/origin/*
然后当成本地分支一样修改,提交,不过不建议,最好在checkout后直接新建一个分支,这样比较好管理。
一般执行git push
时是默认本地master到远程master。但亦可以自行指定本地分支和远程分支(两者的名字没有要求,可以没有任何联系):
git push origin local-new-branch:new-branch
此时git branch -a
的结果:
* local-new-branch
master
remotes/origin/master
remotes/origin/new-branch
如果在某个分支上有多次提交时,可能会提示错误,一般可以这样做:
# 第一次使用时需要
git branch --set-upstream-to=origin/new-branch local-new-branch
git push origin HEAD:new-branch
删除中间的提交
假设有commit1, commit2, commit3, commit4四个提交,你想保留代码但是删除中间的commit2, commit3(有时就是你想记录改bug的思路,后来整明白了就不想留着中间可能存在的无数个提交…),可以这样:
# 先移动HEAD,n是向前移动的提交数,上述例子为3
# 注意不要使用--hard,这样会清掉代码的。
git reset --soft HEAD~n
# 然后提交
git commit
# 如果远程仓库也想更新
git push --force
换基
一般出现在当前分支的父分支有更新时,本地没来得及更新就更改了代码,可以使用git rebase