rebase的信息!
- pick:保留该 commit
- reword:保留该 commit,但我需要修改该commit的 Message
- edit:保留该 commit, 但我要停下来修改该提交(包括修改文件)
- squash:将该 commit 和前一个 commit 合并
- fixup:将该 commit 和前一个 commit 合并,但我不要保留该提交的注释信息
- exec:执行 shell 命令
- drop:丢弃这个 commit
1、仓库初始化问题
配置ssh key
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
# 生成ssh key
ssh-keygen -t rsa -C ""my@email
#之后一直回车看到自己的RSA图,一堆奇怪符号,有0 - + 等
cat ~/.ssh/id_rsa.pub #复制公钥,粘贴到需要的地方
- 之后把公钥配置到github
- git clone等操作如果使用ssh协议,那么久不用输入密码了
仓库为空,将本地内容传上去
git init
git add .
git commit -m "first commit"
git remote add origin git@gitee.com:xxxxxxx
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
想让版本回退到指定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