Git实用技巧,每一个新手程序员必看

223 阅读3分钟

1. commit之后发现还有一个小改动需要添加(例如变量名错误,忘记格式化) 以下操作只限在本地!

解决方法一:

git reset --soft HEAD^
git commit -m '新的提交信息'

解决方法二:

git commit -m '提交信息'
git rebase -i  # 合并提交信息
# 把需要合并的commit的pick改成s
# 修改总体的commit message (使用第一个commit message 把其他的注释掉)

解决方法三:(更简单)

git add . # 或者你可以添加指定的文件
git commit --amend --no-edit

2. commit之后发现commit信息写错了

情况一:针对刚刚提交的commit

git commit --amend

情况二:不是刚刚提交的commit

git rebase -i HEAD^^ #举例是倒数第二次提交 倒数第五次提交就是HEAD~5

# 操作:将要操作的commit前的 pick 改成 edit
# 操作:修改写错的commit

git add .
git commit --amend
git rebase --continue #继续rebase 有冲突需要解决冲突 如果rebase过程中不想rebase了 可以使用git rebase --abort

3. commit提交错分支了

# 切换到正确的分支
git checkout name-of-the-correct-branch
# 抓取 提交错的那个分支上最新的那个 commit
git cherry-pick name-of-the-incorrect-branch
# 然后删掉 master 上的那个 commit
git checkout name-of-the-incorrect-branch
git reset HEAD~ --hard

4. 发现某一次commit有bug

git log # 查看历史提交 A---B(有bug)----C----D---E
git rebase -i HEAD~5

# 操作:将需要修改的commit所在的行前面的 pick 修改为edit或者e
# 操作:修改bug代码

git commit --amend #修改commit信息
git rebase --continue #继续rebase 有冲突需要解决冲突 如果rebase过程中不想rebase了 可以使用git rebase --abort
git push [仓库名] [分支] -f #rebase结束后,会修改所有rebase的commitID,如果想要push到远程仓库可能需要强制push

5. commit的代码不想要了

情况一:刚刚提交的

git reset --hard HEAD^

情况二:不是刚刚提交的

方法一:

git rebase -i HEAD^^ #举例是倒数第二次提交 倒数第五次提交就是HEAD~5
# 操作:将要删除的commit那行全部删掉

方法二:

git rebase --onto 

# rebase 的起点是⾃动判定的:选取当前 commit 和⽬标 commit 在历史 上的交叉点作为起点 起点不包含在 rebase 序列

6. 代码已经 push 上去了才发现写错?

情况一:自己的分支

通过上述方法修改后 可以直接git push origin branch1 -f

情况二:合并到了main分支

revert增加一个新的提交

git revert HEAD^ #这里举例用最新的commit

# 修改完后把新的 commit 再 push 上去,这个 commit 的内容就被撤销了。
# 这样改动只是被「反转」了,并没有在历史中消失掉,历史中会存在两条 commit:⼀个原始 commit ,⼀个对它的反转 commit

7. ⼿头有⼀件临时⼯作要做, 需要把⼯作⽬录暂时清理⼲净

git stash # 在当前分支操作 将所有改动存起来
# 操作:切换到其他分支做其他工作
git stash pop # 处理完其他工作 回到之前的分支 把存储的东⻄取出来

参考资料:

ohshitgit.com/

juejin.cn/book/684473…