闲来无事想总结一下git 操作指令,很多时候总结才有提高,不总结,老是容易记混。下面按照一般使用的顺序总结。
1.初始配置
需要配置用户名与邮箱。
git config --global user.name "xxx"
git config --global user.email "xxx@163.com"
初始化本地和拉取远程代码库
git init
git clone <url>
本地代码要连接到远程的github仓库,这样两者就绑定了。
git remote add origin <url>
2.基本提交流程
如果增删、修改了目录下的文件,需要先把工作区的提交到暂存区,暂存区再提交到本地仓库。没有track 的文件也用add
git add
git commit
git commit -a //相当于git add + git commit 直接把工作区的修改提交
这个过程中,你可以查看现在文件的状态(在哪个个区中)
git status
这个过程中,你可以放弃修改。
git checkout -- 文件名 //相当于放弃工作区的改动
如果已经把改动的文件add到了暂存区。则可以使用reset的命令。
git reset HEAD filename
当然如果已经提交了,那就可以强制回退的方法回到上一个版本的提交。加--hard的之前的都是完全舍弃的,不加的只是把HEAD指针移动了。
git log //查看提交版本的情况
git log --author 作者名字 //查看某个开发者的提交
git log --since/after //日期 查看某日之后的提交
git log --until/before //日期 查看某日之前的提交,这几个有时候想找版本还是挺实用的命令
git reset --hard HEAD~x //来回退到前x个版本
git reset --hard HEAD^ //回退到前一个版本,几个^就倒退几次
当然如果你不小心回退过多了,只要你需要的东西commit过,就没问题,找到哈希值就可以了
git reflog //会显示出你之前的所有操作
git reset --hard 某版本的版本号 //前进到需要的版本
以上就是对某次文件修改,提交,回退的基本操作。
3.分支
分支切换,改动前,需要你的工作区是clean的。用以下命令完成分支切换,删除,增加等。
git branch //查看本地分支
git branch - a //查看所有分支包括远端
git branch -d 分支名 //删除本地分支
git checkout 分支名 // 切换分支;如果是本地无,远程有的分支,则为拉远程分支到本地
git checkout -b 分支名 // 复制分支,分支当前分支到新分支
本地的推送到远端,远端拉取到本地
git push origin //推送到远端的关联分支,把当前分支推送到远端对应分支,origin后面也可以直接加某个远程的分支名字
git pull //同步本地仓库与远程仓库
git pull 远程分支名 // 相当于git fetch + git merge
git merge 分支名 // 一般用于本地合并分支,要先切到被合并方
git push origin --d 分支名 // 删除远程分支
一般来说,本地没有,远程有的分支,拉到本地,分支是同名字,自动关联的,本地推远程没有的也是会自动关联,但是,有时我要改变这一个关联。
git branch -vv //查看本地和远程分支的关系
git branch --set-upstream-to origin/xxx //建立了远程与当前分支的关联
git branch --unset-upstream //unset即为解除
如果出现了冲突,要一步一步的解决冲突。解决冲突的过程可能用到下面的命令
git merge --abort //相当于放弃合并,使得返回合并前的状态
4.进阶命令
git stah
这一部分属于进阶操作了,一般掌握123日常绝对够用了。暂存是指,我想放下当前正在做的时,转而去作另外一件事。此时可以把工作区,暂存区所有工作存起来。 有时候,我们开发了一半,发现在错误的分支上开发的,那么就存起来,切换分支,导出来,岂不美滋滋。
git stash
git stash save hahha //等同于git stash 但可以替你加哈哈哈的注释
git stash pop //把堆栈中的内容(最近一次的)弹出到当前分支的对应工作目录上,此时,该内容会被删除
git stash list //查看堆栈中的内容,最上端的是要被弹出的那个
git stash clear //清除堆栈所有内容
git stash apply //它与pop 的区别在于不会删除,可以通过后加名字制动回复某个stash到当前的工作目录
git submodule
管理子模块的命令,项目庞大了之后,要拆分成许多个子模块。你可以不需要负责子模块的维护,只需要同步更新子模块即可
不想总结这边的啦,有需要查就完事了
git clean
从工作空间中删除没有被 track 的文件,有时候,程序编译后生成一堆.o文件,很烦,OK,没有track的文件全删了,用它。
git clean -n 告诉你如果执行 git clean -f 的话会删除哪些文件。
git diff
对比两个文件的修改记录,有时候比较差异,可以用这个命令
git diff filename //比较工作区和暂存区
git diff --cached filename //比较暂存区与本地最新版本库
git diff commit-id commit-id //比较两个提交的差异
git revert commit_id
回撤之前某次提交。它和reset不同,工作区的文件什么的回退最近的提交前的状态,用git log 你会发现多了一次新的提交。相当于是在当前的分支下面做了一次反向的提交来抵消之前的提交
git tag
给某次提交版本,取得容易记忆的名字。这样方便查找。
git tag <name> //新建标签 默认为HEAD分支,也可以指定一个commit id
git tag -a <tagname> -m "hahahah" //类似于commit -m 后面加一些详细信息
git tag 可以查看所有标签
git tag -d <tagname> //删除标签
git rebase
git rebase b也是把 b分支合并到当前分支,这种合并不是合并,专业来讲叫衍合,操作可以把本地未push的分叉提交历史整理成直线。记住这个图就可以啦。
git rebase - i 起始commit 终点commit 这个相当于合并几次提交,因为同一个问题提交多次,就会显得很乱,用这个处理挺好的