Git常用命令记录

获取最近一次修改的文件列表

1
git diff --name-only HEAD~ HEAD

获取两次commit之间修改的文件

1
git diff --name-only <commit-1> <commit-2>

远端reset

一不小心push了一个错误,想要回到上一版本,可执行

1
git reset --soft HEAD~1 

注:HEAD1的意思是最近一个版本,也可以写成HEAD^
如果需要撤回最近两次提交的commit,可以使用HEAD
2,依次类推。

此时通过 git log 可查看本地代码已经回退到 目标版本。

1
git push origin <branch_name>(例如master) -f

如果你是项目的owner,在本地master分支使用git rebase 或者 git reset撤销了一些commit之后,想要强制推送到远端,以使远端的记录也撤销掉。

git pull 强制覆盖本地的代码

从git上获取最新的代码,覆盖本地:

1
2
3
git fetch --all
git reset --hard origin/<branch_name>
git pull

说明:

git fetch从远程下载最新的,而不尝试合并或rebase任何东西。

然后git reset将主分支重置为您刚刚获取的内容。 –hard选项更改工作树中的所有文件以匹配origin/master中的文件。

git强制覆盖本地命令(单条执行):

1
git fetch --all && git reset --hard origin/master && git pull

error: Your local changes to the following files would be overwritten by merge

意思是我电脑上新修改的代码的文件,将会被git服务器上的代码覆盖。

方法1:如果你想保留刚才本地修改的代码,并把git服务器上的代码pull到本地(本地刚才修改的代码将会被暂时封存起来)

1
2
3
git stash
git pull origin master
git stash pop

如此一来,服务器上的代码更新到了本地,而且你本地修改的代码也没有被覆盖,之后使用add,commit,push 命令即可更新本地代码到服务器了。

方法2、如果你想完全地覆盖本地的代码,只保留服务器端代码,则直接回退到上一个版本,再进行pull:

1
2
git reset --hard
git pull origin master

注:其中origin master表示git的主分支。

Git撤销上一次push的版本

可以用git log 查看你要回到的那个版本

接着用

1
2
git reset --hard HEAD^ 回退到上个版本
git reset --hard commit_id 退到/进到 指定commit_id

最后将本地的修改提交到远程

1
git push origin HEAD --force

当你回滚之后,又后悔了,想恢复到新的版本怎么办?

用git reflog打印你记录你的每一次操作记录

git reflog 可以查看所有分支的所有操作记录(包括(包括commit和reset的操作),包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录。

简单的说,它会记录所有HEAD的历史,也就是说当你做 reset,checkout等操作的时候,这些操作会被记录在reflog中。

1
2
3
4
$ git reflog
b7057a9 HEAD@{0}: reset: moving to b7057a9
98abc5a HEAD@{1}: commit: more stuff added to foo
b7057a9 HEAD@{2}: commit (initial): initial commit

所以,我们要找回我们第二commit,只需要做如下操作:

1
$ git reset --hard 98abc5a

再来看一下 git 记录:

1
2
3
4
5
6
$ git log

* 98abc5a (HEAD, master) more stuff added to foo
* b7057a9 initial commit


代码就回滚到我们想要的提交状态了

:::{note}
dfaksjfklsjfls;a
:::