一起踩过的那些git的坑

1. 测试小姐姐 赶紧修了这个bug,什么鬼?

我没有提交代码啊!
我没有提交代码啊!
我没有提交代码啊!

重要的事情说三遍;查看git log 发现,author 真的是我哦!于是作死又想,小五用了 我的电脑提交代码了!

遇到这种情况要怎么处理呢?我们一步步来说

a. 查看电脑的git config 配置

$ git config --list
config.png

查看终端输出的配置信息中的 user.name 和 user.email 是不是你的名字;如果不是,则可以用下面的命令进行修改:

$ git config --global user.name myname
$ git config --global user.email myemialname

然后再通过 git config --list 命令查看,你会发现git 配置信息已经被变更了;

b. 修改远程仓库上提交的记录

查看提交记录

$ git log

如果你提交的commit刚好是当前HEAD,那么恭喜你,会方便很多,命令如下

$ git commit --amend --author "myname" -m "你之前commit时提交的描述信息"
$ git fetch
$ git push --force-with-lease origin branchname

  注意:这里一定要先fetch 远程仓库的代码下来,如果有冲突的话,就解决下冲突,然后在push.

如果是第二条记录,如下所示,要修改第二条记录的Author,


log.png

则需要执行下面的命令

$ git rebase -i HEAD~2
pick db11001 test 111111
pick 82a8194 test 2222222

# Rebase bda891e..82a8194 onto bda891e (2 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
~                                                                                                                             
~      

将第二条的 pick 修改为 edit,保存退出,此时终端如下所示:

Stopped at 82a8194...  test 2222222
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue

此时从新提交 commit 信息

$ git commit --amend --author "mynamechange" -m "test 222222"
[detached HEAD 196e5cd] test 222222
 Author: mynamechange 
 Date: Tue Mar 26 20:50:32 2019 +0800
 1 file changed, 3 insertions(+), 1 deletion(-)
$ git rebase --continue
Successfully rebased and updated refs/heads/master.
$ git push -f

此时再查看 log ,发现已经被修改了,但是变成了最顶的一条commit记录了,commit id 也发生了变化,commit的内容没有发生变化;

commit 49f5a2bcc90b53493a7efdba2b323028c3355519 (HEAD -> master, origin/master, origin/HEAD)
Author: mynamechange 
Date:   Tue Mar 26 20:50:32 2019 +0800

    test 222222

commit db1100183a5eb6f17b5ddfb6254533461d7fee5c
Author: myname 
Date:   Tue Mar 26 20:49:44 2019 +0800

    test 111111

commit bda891e62d92d331fb7ab28c1afba0aa4572b5a2

2. 脑子短路一下子手贱 提交了测试代码到远程

  这种情况,最好是第一时间能够发现问题,要不然等别人提交了代码,再做抹除就会把其他人的提交也一并抹除掉了!

查看提交记录对应的commit id

$ git log

然后通过reset 命令,将本地仓库的代码回到 指定的 commit id;这个commit id 之后提交的代码则会全部被reset掉;
所以

这个命令慎用!
这个命令慎用!
这个命令慎用!

命令如下所示:

$ git reset --hard dd98a8ea02dd31b8eb97bd686c3ebf2ed59a66d7
$ git add .
$ git commit -m "test reset"
$ git push origin HEAD --force

这个命令会将之前提交的记录直接抹掉,并且不会产生新的commit 记录;

你可能感兴趣的:(一起踩过的那些git的坑)