rebase的信息!

  • pick:保留该 commit
  • reword:保留该 commit,但我需要修改该commit的 Message
  • edit:保留该 commit, 但我要停下来修改该提交(包括修改文件)
  • squash:将该 commit 和前一个 commit 合并
  • fixup:将该 commit 和前一个 commit 合并,但我不要保留该提交的注释信息
  • exec:执行 shell 命令
  • drop:丢弃这个 commit

1、仓库初始化问题

配置ssh key

  1. git config --global user.name "你的名字"
  2. git config --global user.email "你的邮箱"
  3. # 生成ssh key
  4. ssh-keygen -t rsa -C ""my@email
  5. #之后一直回车看到自己的RSA图,一堆奇怪符号,有0 - + 等
  6. cat ~/.ssh/id_rsa.pub #复制公钥,粘贴到需要的地方
  • 之后把公钥配置到github
  • git clone等操作如果使用ssh协议,那么久不用输入密码了

仓库为空,将本地内容传上去

  1. git init
  2. git add .
  3. git commit -m "first commit"
  4. git remote add origin git@gitee.com:xxxxxxx
  5. git push -u origin master

2、代码版本问题

git commit —amend 修改最近一次commit信息

  • 需要先git add
  • amend可以将新的commit和最近的commit连起来
  • 默认情况下会出现一个对话框,让你修改commit message。不过可以直接加一个—no-edit不用修改这个message

amend+rebase 修改以前的commit信息

  • 有时候想amend的commit并不是最新的,这个时候就要rebase
  • git log找到想要amend的commit
  • git rebase -i 交互式修改
  • 修改commit
    • 假设出现的交互式修改如下
      • pick 111111 first-commit
      • pick 222222 second-commit
    • 修改第一个commit信息的时候,可以把pick改成edit
    • 此时可以用git commit --amend修改,改好之后git rebase --continue
  • git commit —amend将修改应用到commit
  • git rebase —continue继续rebase

让开发分支跟主分支保持跟进

  • git fetch 保证local仓库和remote仓库跟进
  • git checkout branch
  • git rebase branch
  • 具体如下
    • git checkout master
    • git pull origin master
    • git checkout my-branch
    • git rebase master
    • resolve conflicts
    • 当rebase完成并且没有conflicts,将修改push到remote branch
      • git push origin my-branch

将多个commit合成一个再提交

  • git checkout my-branch
  • git rebase -i master
    • 处理各种冲突,但这部分最好是图形化的
    • 把除第一个之外的pick改成squash从而合成commit,这里出来的交互界面是整个commit信息,一般会包含这几个commit已有的信息,需要我们自己修改
  • git push origin my-branch
  • git checkout master
  • git merge —no-ff my-branch
    • —no-ff保存merge commit

想让版本回退到指定commit并保存之后所有修改

  • git reset commit-id 默认会保持所有修改
  • —soft 会让指定commit后续的修改处于staged的状态,于是后面可以直接git —amend
  • —hard 修改会处于unstaged的状态,于是我们后面还需要commit
  • git reset commit-id —hard 抛弃修改,并重置这个repo到完全一直的状态
  • 注意git reset相当于修改历史,要小心

放弃历史的某个commit

  • 可以直接用git rebase -i commit_id
  • 然后进入vim界面,把对应的pick改成drop