git add
在使用git init
初始化一个repository之后,需要使用git add filename
来使得repository内的文件被tracked,上面的命令只适合于单个文件被添加的情况,如果我们有多个文件被添加的时候,我们会使用一些参数,见下表。
命令 | 效果 |
---|---|
git add . | 提交新增文件和修改文件,不包括被删除文件 |
git add -u | 提交被删除文件和被修改文件,不包括新增文件 |
git add -A | 提交全部修改,即上两条指令的并集 |
下面详细讲述一下不同参数的区别。
git add .
这条命令只提交新增文件和修改文件,不包括删除文件。原因是它他监控的是工作区的状态树,它会把工作区存在的文件变化提交到暂存区,相当于对工作区的每一个变化文件使用 git add 命令,所以对于在工作区删除文件但是该文件已经进入暂存区,git add操作并不会对它在暂存区产生任何影响。
git add -u(--update)
这条命令只提交删除文件和修改文件,不包括新增文件。原因是这条指令只对存在于暂存区的文件(tracked file)进行操作,监控暂存区文件的任何变化,包括删除和修改,但是对于工作区新增加的文件,由于还没有添加到暂存区,因此不会对新增文件产生任何影响。
git add -A(--all)
这条指令会对任何操作进行提交,相当与是前两条指令的并集。
实例
git init
echo Change me > change-me
echo Delete me > delete-me
git add change-me delete-me
git commit -m initial
echo OK >> change-me
rm delete-me
echo Add me > add-me
git status
# Changed but not updated:
# modified: change-me
# deleted: delete-me
# Untracked files:
# add-me
git add .
git status
# Changes to be committed:
# new file: add-me
# modified: change-me
# Changed but not updated:
# deleted: delete-me
git reset
git add -u
git status
# Changes to be committed:
# modified: change-me
# deleted: delete-me
# Untracked files:
# add-me
git reset
git add -A
git status
# Changes to be committed:
# new file: add-me
# modified: change-me
# deleted: delete-me
这个例子中还涉及了一个命令git reset
,下面来详解讲解一下该命令和与它相关的git reverse
命令
git reset
这一个版本回退命令,恢复到之前的某个版本,且在那个版本之后的提交都会删除。
使用方式
- 使用
git log
查看要回退的版本号。 - 使用
git reset --hard 目标版本号
回退到指定版本。 - 使用
git push -f
上传到远程库(因为本地的版本比远程库的版本要老,因此需要使用-f参数强制推送)。
git revert
除了上述方法外,git revert
命令也可以进行版本回退,但是二者的原理不同。git revert
提交一个新的版本,将需要revert的版本的内容再反向修改回去,相当于一次逆向的commit。
使用方法
- 使用
git log
查看要回退的版本的前一个版本号。 - 使用
git revert -n 目标版本的前一个版本的完整的版本号
。
可能会有代码冲突,需要手动修改冲突。 - 使用
git commit -m "说明"
由于是新增加的一个版本,因此需要新的commit。 - 使用
git push
推送到远程仓库。
参考文章
[1] https://www.cnblogs.com/skura23/p/5859243.html
[2] https://blog.youkuaiyun.com/yxlshk/article/details/79944535
[3] https://www.cnblogs.com/0616--ataozhijia/p/3709917.html