Git穿梭时空

来源:互联网 发布:淘宝宝贝图片尺寸大小 编辑:程序博客网 时间:2024/04/28 10:26

在使用git的时候想把git add 添加到暂存区的文件撤出怎么办!或者想回到某个已经提交的版本怎么办,更甚者想把工作区的修改撤销掉又该怎么办。这些想法就像穿梭时空一样不可思议,但这在Git里都是可以实现的!

先说把git add 添加到暂存区之后,怎么把文件怎么撤出暂存区。可以使用git reset HEAD 文件名 命令把文件从暂存区撤出。下面是git reset的具体用法。

git reset commit id 命令会重置分支所指向的commit id,还可以根据参数不同可以对暂存区,工作区进行重置。

git reset --soft commit id:改变分支指向的commit id

git reset --mixed commit id (如果不带参数默认就是–mixed): 改变分支指向的commit id然后替换暂存区,暂存区的内容与分支指向的目录树一样

git reset HEAD: 使用HEAD指向的目录树重置暂存区,工作区不会受影响,可以理解为把git add 命令更新到暂存区的内容撤出暂存区。

git reset HEAD 文件名:相当于把指定的文件的改动撤出暂存区。

git reset --soft HEAD^: 使分支回退到上一个提交,暂存区和工作区不会被改变。

git reset HEAD^ :工作区不会被改变,暂存区和分支回退到上一个提交的状态。

git reset --hard HEAD^ : 工作区,暂存区,分支都会回退到上一个提交。

git reset --hard :替换分支的引用指向,替换暂存区,暂存区指向与分支指向一样,替换工作区,工作区内容与暂存区一致。

git reset --soft :替换分支的引用指向.

git reset --mixed(默认的): 替换分支的引用指向,暂存区指向与分支指向一样,

git reset HEAD :使暂存区指向与分支指向一样,相当于用git add 添加到暂存区的文件撤出来。

tips :所以你想修改上次提交的message可以使用下面这个命令
git commit --amend : 修改最近提交的消息。


想把工作区的某个文件的修改撤销掉可以使用git checkout 文件名这个命令。下面是git checkout的具体用法。

git reset改变的是分支的指向!而git checkout 改变的是HEAD的指向!因此git checkout 命令还可以切换分支。

git checkout 分支名 :切换到指定的分支,工作区,暂存区,HEAD的指向都指向指定分支所指向的目录树。

git checkout 文件名:用暂存区中的文件覆盖工作区中的文件从而达到撤销对文件的修改。

git checkout branch 文件名:用branch所指向的目录树里面的文件替换工作区和暂存区中的文件。

git checkout . :注意有个(.),这个命令会清空你对工作区所以的修改(前提是文件处于modified状态下)。想当于用暂存区的所以文件直接覆盖工作区!


在使用git reset --hard HEAD^命令回到上一个版本之后又后悔了怎么办。此时使用git log命令是只能看到当前分支之前的提交。那此时该怎么办! 可以是用git reflog

git reflog命令查看的是.git/logs/ 下面的子文件,这个文件包括了分支的操作,commit操作,pull操作,push操作,checkout操作等等都记录(包含commit id)这.git/logs/文件下面对应的子文件。(git reflog这个命令应该是能看到所以会产生commit id的操作记录吧?
)

tips: git reflog .git/logs/文件名可以看到具体的操作记录,比如 git reflog master 查看master分支上的操作记录。

tips:.git/logs/ 下面的子文件文件里面的内容与git reflog命令看到的内容是相反的,git reflog最近的操作在前面而文件最近的操作在后面

参考

《Pro Git》
《Git权威指南》


如此文章有不对地方请多多指正!

原创粉丝点击