1、综述
git是分支开发,主干发布,新建立的分支最好是基本master拉出去的。
2、branch
git branch -a #参考当前所有分支,前面有*标识的表示当前所在的分支
git branch p1 origin/master
git branch dev origin/master #新建dev分支,该分支是基于 origin 的远程分支 master
git checkout dev#切换到dev分支
git branch -d dev#删除dev分支
git push --set-upstream origin dev #将新建的dev分支push到远程的dev分支上
3、checkout和reset
reset
git reset HEAD <file>..." 撤出暂存区
git reset HEAD -- filename #将文件filename的改动撤出暂存区,暂存区中其他文件不该变.相当于git add filename的反向操作
git reset --hard <commit> #替换引用的指向.引用指向新的提交ID(我的理解就是回到指定的历史版本信息)
checkout
git checkout -- filename
用暂存区中的filename文件来覆盖工作区中的filename文件.相当于取消自上次执行git add filename以来(如果执行过)的本地修改
git checkout -- .或者git checkout .
会取消本地所有修改,相当于用暂存区的所有文件直接覆盖本地文件,
git checkout 27d1bfd29b,回到这个提交点,git checkout dev,又会到最新的提交,而git reset是不可以的。
git checkout -- filename #用暂存区中的filename文件来覆盖工作区中的filename文件.相当于取消自上次执行git add filename以来(如果执行过)的本地修改
git checkout HEAD <commit> #取消本地所有修改,相当于用暂存区的所有文件直接覆盖本地文件
区别
git checkout 27d1bfd29b,回到这个提交点,git checkout dev,又会到最新的提交,而git reset是不可以的。
4、log、reflog、cherr-pick
git log
执行过git reset --hard HEAD~1 删除之前的commit提交信息。git log只查看到之前的git commit提交版本信息,恢复该提交点的commit看不到
git reflog
git reflog可以查看所有的commit提交信息。可以通过git reset --hard <commit>进行恢复之前误恢复的操作
example 假设有三个commit, git status: commit3: add test3.c commit2: add test2.c commit1: add test1.c 模拟丢失commit记录的情况,执行git reset --hard HEAD~1,删除了commit3,同时test3.c文件已经在working tree里看不到了,如果要恢复commit3,就要使用git reflog和git cherry-pick. git reflog 502dd0f HEAD@{0}: HEAD~1: updating HEAD 147b3b5 HEAD@{1}: commit: test3 502dd0f HEAD@{2}: commit: test2 0692c03 HEAD@{3}: commit (initial): test1 HEAD@{0}: HEAD~1: updating HEAD 加粗的即是被删除了的 commit3,运行git log则没有这一行记录,可以使用git reset --hard 502dd0f 将红色记录删除,恢复cmmit3,需要用git cherry-pick.
git cherry-pick 147b3b5 #恢复到test3提交点 运行git log后可以看到: commit3: add test3.c commit2: add test2.c commit1: add test1.c
5、远程仓库
git push origin dev 想把当前的代码push到远端的dev分支上,可是遇到奇怪的错误,可能因为没有执行git pull origin master
执行git pull origin master后执行git push origin dev还是会报错,可以继续这样解决:
git pull --rebase origin dev #rebase 分支衍合,待研究#
6、commit
git commit --amend #可以更改上一个提交的注释
7、config alias
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status