第一次初始化

git init  // 初始化一个git仓库
git add . 
git status
git commit -m 'first add'
git remote add origin https://github.com/shichangqi/scqvue.git // 建立远程连接
git pull --rebase origin master // 拉取远程master分支下的代码
git push -u origin master // 推送至远程仓库master
--rebase 变基,相当于本地代码与远程仓库代码的merge
git push -u第一次提交后,之后可以简化为git push

现在项目临时出了一个BUG,所以新建了一个bug分支专门用来解决,当bug解决完后要合并到master上去

        D---E bug 
      /
 A---B---C---F--- master

使用merge如下,合并后产生一个新节点G

        D-------E
      /          \
 A---B---C---F----G---   bug, master

使用rebase如下,并不会产生新节点,而是将两个分支融合成一个线性的提交,如果出现冲突,先修改冲突,然后执行git rebase -continuegit rebase -skip

A---B---D---E---C‘---F‘---   bug, master

何时用rebase

个人理解:如上面代码,在本地仓库初始化时拉取远程仓库的代码,使用--rebase可以得到更好的提交树,而且在合并的过程中遇到冲突会中断,提示去修改冲突
其他情况避免使用rebase,如上,一旦bug分支与master分支合并,出现问题,可以直接回退到版本F,如果使用rebase那就出现大问题了

第一拉取远程代码

git clone xxxx.git
git branch -al // 查看本地和远程的分支
git branch master // 创建本地分支master
git checkout master // 切换到本地分支master
git pull origin master // 将本地master与远程master关联
git branch -vv  // 查看当前分支的关联分支
git add .
git commint 
git push

合并分支

git checkout master
git merge dev // 将dev分支的代码合并到master上去

合并远程分支

git checkout -b dev origin/dev // 简写语法,相当于
// git branch dev
// git checkout dev
// git remote add origin xxx.git
git pull
git checkout master
git merge dev // 合并本地master分支与dev分支
git push origin master // 推送至远程仓库,完成远程合并

版本回退

git log // 查看提交日志,里面包含提交的版本号
git reset --hard 版本号 // --hard会清空工作区未commit的修改,慎用
git push -f // 强制推送,因为本地的HEAD指向版本要比远程旧

或者

git reset --hard HEAD^ // 将代码还原到上一版本,^的数量表示往上版本数量

放弃本地修改

  1. 未执行git add

    git checkout -- a.txt b.txt
    git checkout -- *
    git checkout -- *.txt
  2. 已执行git add

    git reset HEAD a.txt b.txt
    git reset HEAD *
  3. 已执行git commit
    执行版本回退

yingmhd
67 声望4 粉丝

路漫漫其修远兮,吾将上下而求索