日常操作:
git branch -a 查看远程所有分支
git branch 查看本地所有分支
git add . 提交所有本次修改
git commit -m "本次修改内容" 把修改内容提交到本地分支
git push 推送到远程分支
git push origin HEAD
git checkout master 切换分支
git checkout -b dev 新建dev分支
git branch 查看所有分支
git branch -d + 分支有可能会删除失败,因为Git会保护没有被合并的分支。
git branch -D + 分支 强行删除,丢弃没被合并的分支
git stash命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈中的内容
git stash 将所有未提交的修改(工作区和暂存区)保存至堆栈中,用于后续恢复当前工作目录
git stash save "test1" 可以添加一些存储的注释
git stash list 查看当前所有存储
git stash pop 将当前stash中的内容弹出,并应用到当前分支对应的工作目录上。
注:该命令将堆栈中最近保存的内容删除(栈是先进后出)
git stash apply 将堆栈中的内容应用到当前目录,不同于git stash pop,该命令不会将内容从堆栈中删除
git stash drop ”test1" 从堆栈中移除test1的stash
git stash clear 清除堆栈中的所有 内容
git stash branch 从最新的stash创建分支。
合并分支:
git checkout master 切换到master分支
git merge dev 把dev分支合并到master分支
git push 推到远程分支
git branch -d dev 删除dev分支,下次再次开发可继续从master分支拉去
git log --graph 查看分支合并图
git log 查看commit
回退:
Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
现在,我们要把当前版本append GPL回退到上一个版本add distributed,就可以使用git reset命令
git reset --hard commitId 回退到指定版本
git reset --hard HEAD^ 回退到上一个版本
git reset --hard HEAD^^ 回退到上上个版本
git reset --hard HEAD~10 回退到倒数第十个版本
git checkout -- readme.txt 撤销本次未提交前的修改
git reset HEAD <file> 撤销该文件的add操作,撤销暂存区
删除:
rm -rf test.txt 删除本地文件
git rm test.txt 删除暂存区文件
git commit 提交本次改动到版本库
还原
git ckeckout -- test.txt 还原版本库中替换工作区
git 本地代码关联并上传远程库
进入本地代码文件目录
git init 初始化
git add . 提交所有本次修改
git commit -m "本次修改内容" 把修改内容提交到本地分支
git remote add origin https://github.com/luoylove/at.git 将本地的仓库关联到github上
git pull origin master 将远程代码pull到本地
git push -u origin master 将本地代码push到远程分支上
(注:pul本地出现错误 fatal: refusing to merge unrelated histories 错误,其实这个问题是因为 两个 根本不相干的 git 库, 一个是本地库, 一个是远端库, 然后本地要去推送到远端, 远端觉得这个本地库跟自己不相干, 所以告知无法合并,使用这个强制的方法
git pull origin master --allow-unrelated-histories
后面加上 --allow-unrelated-histories , 把两段不相干的 分支进行强行合并)
git如何撤销上一次commit操作
1.第一种情况:还没有push,只是在本地commit
git reset --soft|--mixed|--hard <commit_id>
git push develop develop --force (本地分支和远程分支都是 develop)
这里的<commit_id>就是每次commit的SHA-1,可以在log里查看到
--mixed 会保留源码,只是将git commit和index 信息回退到了某个版本.
--soft 保留源码,只回退到commit信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可.
--hard 源码也会回退到某个版本,commit和index 都会回退到某个版本.(注意,这种方式是改变本地代码仓库源码)
2.commit push 代码已经更新到远程仓库
对于已经把代码push到线上仓库,你回退本地代码其实也想同时回退线上代码,回滚到某个指定的版本,线上,线下代码保持一致.你要用到下面的命令
git revert <commit_id>
revert 之后你的本地代码会回滚到指定的历史版本,这时你再 git push 既可以把线上的代码更新。
注意:git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit,看似达到的效果是一样的,其实完全不同。
第一:上面我们说的如果你已经push到线上代码库, reset 删除指定commit以后,你git push可能导致一大堆冲突.但是revert 并不会.
第二:如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里.但是revert 方向提交的commit 并不会出现在历史分支里.
第三:reset 是在正常的commit历史中,删除了指定的commit,这时 HEAD 是向后移动了,而 revert 是在正常的commit历史中再commit一次,只不过是反向提交,他的 HEAD 是一直向前的.
标签管理
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针。
tag其实就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。比如tag v2.1就是把历史上的一个版本的东西叫做v2.1
git tag <name> 打标签,默认为HEAD。比如git tag v1.0
默认标签是打在最新提交的commit上的。如果想要打标签在以前的commit上,要git log找到历史提交的commit id.
如果一个commt id是du2n2d9,执行git tag v1.0 du2n2d9就把这个版本打上了v1.0的标签了。
git tag 查看所有标签,可以知道历史版本的tag
标签不是按时间顺序列出,而是按字母排序的。
git show <tagname> 查看标签信息。
git tag -a <标签名> -m "<说明>",创建带说明的标签。-a指定标签名,-m指定说明文字。用show可以查看说明。
git tag -d v1.0 删除标签。因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。
git push origin <tagname> 推送某个标签到远程
git push origin --tags 一次性推送全部尚未推送到远程的本地标签
如果标签推送到远程。git tag -d v1.0 先删除本地标签v1.0。git push origin :refs/tags/v1.0删除远程标签v1.0