目录
前提概要
git status //查看我们工作区的修改的文件
git diff
提交
撤销/回退(!!)
1. 撤销对文件的修改
2. add多了,取消暂存
3. commit错了,重新commit
4. 取消commit, 回退到指定版本
5. git push修改撤销
git reset
git revert
git merge
一些问题
git branch -r无法显示最新分支问题
error: 您尚未结束您的合并(存在 MERGE_HEAD)。
git revert时显示是一个合并提交但未提交-m选项 fatal:还原失败
工作区中下列未跟踪的文件将会因为检出操作而被覆盖:
git clean 从工作区中删除未跟踪的文件
由上图可以看出,通常情况下, 当我们运行的git add .,是将工作区(workspace)的代码提交到了暂存区(index)中,然后我们经常运行的git commit -m “修改代码提交说明”是将暂存区中的代码提交到了本地仓库(local Repository)中。再往后就是我们通过git push将本地仓库的代码提交到远程仓库了。
https://www.cnblogs.com/lsgxeva/p/8540485.html
git diff //查看 workspace(工作区) 与 index(暂存区) 的差别的。
git diff –cached //查看index(暂存区)与local repositorty(本地仓库)的差别的
git diff HEAD //查看 workspace和local repository的差别的。(HEAD 指向的是 local repository 中最新提交的版本)
注:git diff 后跟两个参数,如果只写一个参数,表示默认跟 workspace中的代码作比较。git diff 显示的结果为 第二个参数所指的代码在第一个参数所指代码基础上的修改。如,git diff HEAD 表示 workspace 在 最新commit的基础上所做的修改
先用git status和git diff查看一下
git add [参数] <路径> // -u不包括新增文件,-a包括
git commit -m ‘message’ //-a将未git add也提交,不包括新增文件
git push <远程主机名> <本地分支名>:<远程分支名>
git status //查看状态
git checkout --
git checkout 文件名 //从暂存区拉取到工作区,撤销本地修改
git restore 文件名 //同上
git reset HEAD
git commit --amend
如果上次提交的内容有误,想进行修改,而且不想进行新的提交,使用该命令(最终只会有一个提交——第二次提交将代替第一次提交的结果)。步骤:
git log //查看之前版本
git reset
1)通过git reset是直接删除指定的commit
git log # 得到你需要回退一次提交的commit id
git reset --hard
git push origin HEAD --force # 强制提交一次,之前错误的提交就从远程仓库删除
2)通过git revert是用一次新的commit来回滚之前的commit
git log # 得到你需要回退一次提交的commit id
git revert
3) git revert 和 git reset的区别
git revert是用一次新的commit来回滚之前的commit,此次提交之前的commit都会被保留;
git reset是回到某次提交,提交及之前的commit都会被保留,但是此commit id之后的修改都会被删除
根据–soft –mixed –hard,会对working tree和index和HEAD进行重置:
git reset –mixed:默认选项。缓存区和你指定的提交同步,但工作目录不受影响。它回退到某个版本,只保留源码,回退commit和index信息
git reset –soft:不删除工作空间的改动代码 ,撤销commit,不撤销git add file
git reset –hard:删除工作空间改动代码,撤销commit且撤销add。不要随便使用!
HEAD 最近一个提交
HEAD^ 上一次
git reset --hard HEAD^ //拉取服务器最近一次提交到暂存区,该操作不影响工作区。
然后执行“git checkout 文件名”,从暂存区拉取到工作区。
注:如未进行push操作,可以直接执行“git checkout 文件名”,拉取暂存区替换工作区
适用场景:如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用reset
git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。如下图所示:
适用场景: 如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。
使用“git revert -n 版本号”反做,并使用“git commit -m 版本名”提交:
(1)反做,使用“git revert -n 版本号”命令。如下,反做版本号为8b89621的版本:
git revert -n 8b89621019c9adc6fc4d242cd41daeb13aeb9861
注意: 这里可能会出现冲突,那么需要手动修改冲突的文件。而且要git add 文件名。
(2)提交,使用“git commit -m 解释”,如:
git commit -m "revert add text.txt"
https://blog.csdn.net/yxlshk/article/details/79944535
注意,revert merge操作需要提供-m选项
git revert< hash> -m 1或者2
-m参数含义:Merge 标注为Merge: a2471f3 6a17d85,传1表示撤销到a2471f3所代表的commit,传2表示撤销到6a17d85所代表的commit。数字1,2表示的是标注冒号后的位置编号。1代表合并前的分支,2代表
//git log可查看具体要回退哪个commit
//git log可查看具体要回退哪个commit
commit 94ce4b8dcb898f730e6eecd73c00491f8020b67e
Merge: a2471f3 6a17d85 本次属于merge commit,注意Merge 标注
Author: 罗**
Date: Fri May 20 11:03:53 2016 +0800
commit a2471f331c36a21d25aa158668cdc05987eef114
Author: 罗**
Date: Fri May 20 11:03:01 2016 +0800
verison 9
commit 6a17d85b04e52eddeb2ecb2a311804e10dada1e6
Author: 罗**
Date: Fri May 20 11:02:10 2016 +0800
version 8
git checkout dev
git pull
git checkout master
git merge dev
git push -u origin master
二、当master代码改动了,需要更新开发分支(dev)上的代码
git checkout master
git pull
git checkout dev
git merge master
git push -u origin dev
git fetch一下,拉取最新分支
提示:请在合并前先提交您的修改。
fatal: 因为存在未完成的合并而退出。
git reset
git revert< hash> -m 1或者2
如果要清除未跟踪文件,可用git clean
如果要加入,用git add
使用 man
命令,查看命令使用
man git clean
SYNOPSIS 概要
git clean [-d] [-f] [-i] [-n] [-q] [-e
OPTIONS
-d
删除未跟踪的目录和未跟踪的文件。如果一个未跟踪的目录是另一个不同的 Git 库,默认将不会把它删除。如果你想删除这个目录,可以使用 -f
-f
, --force
如果 Git 配置中 clean.requireForce
没有设置为 false
,git clean 将拒绝执行。除非是使用 -f
-n
-i
-i
, --interactive
使用交互式显示将被删除的文件-n
, --dry-run
仅仅显示将被删除的文件,不会真正的删除-q
, --quiet
静默,仅仅显示错误,不包括成功移除的文件-e
, --exclude=
除了在 .gitignore
(每个目录)和 $GIT_DIR/info/exclude
,也要考虑这些模式设置的忽略规则-x
不使用 .gitignore
(每个目录)和 $GIT_DIR/info/exclude
的标准忽略规则,但仍然使用使用 -e
选项给出的忽略规则。这允许删除所有未跟踪的文件,包括构建产品。 这可以使用(可能与 git reset)以创建一个原始的工作目录来测试一个干净的构建-X
只删除 Git 忽略的文件。这可能有助于从头重建一切,但保留手动创建的文件常用操作
通过以上几根参数组合,基本上可以满足删除未跟踪文件的需求了
1、例如在删除前先查看有哪些文件将被删除运行:
git clean -n
2、想删除当前工作目录下的未跟踪文件,但不删除文件夹运行(如果 clean.requireForce
为 false
可以不加 -f
选项):
git clean -f
3、想删除当前工作目录下的未跟踪文件以及文件夹运行:
git clean -df