git的一些补充点

时间:2023-11-12 16:18:08
  1. git rm和 rm的区别
    git rm是删除文件, 同时加入到git的跟踪管理中,做一个登记,那么在git commit的时候, 会把这次删除作为一次修改提交上去, 否则, 在 git log中你就看不到 这次修改提交.
    rm仅仅只是 文件管理器的 删除 文件的命令, 从 硬盘上删除, 但是没有在git中做登记.记录, 所以 在git commit的时候,不会把这次删除记录操作 提交到local server上
    那么如果 已经 用 rm删除文件了,又 要 git commit的话, 可以在 commit的时候, 带上 -a选项: git commit -am 'msg...

  2. git rm --cache file/path
    --cache是指 只是从 缓存区 stage区域 删除, 并不从工作区中删除文件.
  3. git commit -am 'xxx'
    -m是 msg --message是消息的意思,是对该次提交所作的注释
    -a 是 --all 是对 所有做了修改和删除的文件进行 自动 stage, 但是对 新文件(没有add的新文件)没有影响
    git -a: tell command to automatically stage files that have been modified and deleted, but files you have not told git about are not affected.
    也就是, 如果 你只是用 rm命令 而不是用git rm 删除文件, 那么你就可以有两种方式进行处理:
    第一, 再次用 git rm删除, 最后, commit
    第二, 不用git rm了, 在提交的时候, 带上 -a选项. 即 git commit -am '...'

因为对文件的编辑方式有 新建 new, 修改modify, 删除delete几种, 当然你可以把所有的文件都 add到stage中, 然后commit, 也可以 只add新建文件, 而对modify和delte的文件, 不add, 在commit的时候, 带上 -a选项就可以自动 将它们提交到stage了.

git push -u origin master:

"origin master" 是指推送到origin仓库的 master分支
-u是指默认, 绑定, 将当前分支推送到 默认的/绑定的远程仓库上的对应分支.
当第一次使用了 -u选项后, 以后 推送的话, 就不再需要写 origin master了.直接使用 git push

git 从2.0之后, 默认的推送选项是 --simple 不再是2.0之前的--match, 如果是 --match表示的是将当前本地分支 推送到 所有匹配的 远程仓库的对应分支.

git push 是指, 如果当前分支和 多个(远程主机上的仓库分支)之间 存在"追踪" 关系, 那么指定-u会绑定一个默认主机, 以后就可以git push而不用任何参数推送到 默认的 远程仓库上去了 . git 就是用来 建立/保持/管理 这种 追踪关系的! 通过这种 追踪关系 来保持对文件/工程 (所谓工程, 就是 在一个项目中, 所有文件/多种资源的 文件的集合 包括这些文件和它们之间的 相对依赖关系的 总称) 的关联, 所以, 如果你要 保持 版本跟踪, 那么 就告诉 git吧, 让git 来为你 管理 你的文件或工程!!!

  1. git brach -avvl
    -a显示所有的分支,
    -v显示每次提交的详细信息
    -l显示每个分支的对应信息等
  • git branch -avv, 注意这里是两个-v, 两个小写的v, 不是 -v-V, 没有 大V, 大V是错误的.
  1. git log
    显示所有的提交记录

git add -A
不需要一个一个地添加untracked文件, 可以一次性地添加所有的文件.


关于git 的使用的一个详细参考地址: https://blog.****.net/gemmem/article/details/7290125

其中 很重要的一个概念是 : git仓库在哪里,和目录的关系是怎样的?

  • git仓库就是那个 隐藏目录 .git
  • 仓库和工作目录的位置关系: 能否 将一个目录下的 git仓库, 和 本地机器上 另一个不同位置处的 目录(即 工作目录)之间建立关联, 并进行add和commit 等 跟踪/追踪呢?
    不能: 因为, git仓库和 你说的那个要与之建立关联/联系的那个目录(实际上就是 工作目录) 之间 是 紧密相连的, 它们之间是不能分开的,不能分割开的,事实上, .git仓库就 存在于 工作目录下! .git仓库 是 工作目录下的 一个 隐藏子目录.
    所以, 比如, 如果你想对 www/html网站目录进行git跟踪管理, 就应该直接在 html目录下运行 git init命令, 这样在 www/html目录下(工作目录) 就生成一个 .git的 版本管理仓库了.

  • git 命令是针对某一个 仓库而言的. repo命令是针对某一个项目而言的. 因为一个项目中 可以包含多个 仓库. 所以 在具体的一个仓库中 , 就使用 git命令
  • git 的帮助命令是: git help 某某命令 这里git 就相当于一个 总的 命令.... 字命令就是help命令....

===============

要提交git commit, 必须告诉tell git who are you. 就需要配置git 使用 命令 git config 来配置 user. 其中 --global 和 --local选项指定 该user配置 是全局的(每个/仓库) 还是只用于当前这个仓库的.

全局的git配置是 在 ~/.gitconfig 文件中, 如果是 当前仓库的配置文件, 则是: .git/config 文件 注意两个配置文件的名称不同.
配置 user 对象, 会有一个 [user]节. 如果是 配置 当前仓库的话, 是指 该user 只用于 当前仓库的提交.

在git提交时, 会发现, 即使某些文件本身 并没有改变, commit 时, 仍然提示有所改变,"... files changed, .. . insertions" 是 由于 在 当前仓库的 配置文件.git/config 中设置 了 core.filemode=true. 意思是指 将工作目录中的文件 提交到 stage的时候, 都改变成 100644的模式:

100表示 文件的类型是 "普通文件" regular file, 040是目录, 120 是 symbolic link 等
644是文件的模式.
所以 是由于文件模式发生了改变, 导致文件在 commit的时候, 发生了改变, 要使文件不发生改变, 只要修改 core.filemode 为 false 即可!

git config 命令就是 对 git 配置文件 进行操作的命令, 你可以用 git config -e 打开编辑器来编辑这个config文件. 也可以用 --add, --unset , --replace, --replace-all, --get等选项来操作配置文件, 但是都要通过 config命令来进行, 不能直接用 git get core.filemode等类似命令来 操作config文件, 因为 只有git config命令, 没有 git get命令!

==============

git的版本跟踪/追踪, 是非常尊重用户的, 如果你不想要这个 版本仓库了, 不想再对工作目录进行版本管理了, 你可以删除 这个 git仓库: 只需要一步操作就可以了: 删除 工作目录下的 隐藏文件夹 .git 这个目录就可以了.

如同在汉语中, 有多音字和相同发音的字, 英语中同样有很多的同音字. 比如ge音: 有 歌, 哥, 各, 葛, 戈等的发音. 但是要通过 语境上下文来区分. 同样的, 英语中也有很多同音字, 所以, 听英语 也不是 单独的听一个一个的单词的~ (听单一,单独的,一个一个的单词,你是听不出是什么单词的, 因为有那么多 的同音字)也是要听词组的, 听句子的! 也是要根据 上下文的语境来进行区分和读取/理解的...

clothes: 不能用单数和数词: 比如: the clothes are smart. 不能说 five clothes. 通常只说 those clothes, 或用数词 : a T-shirt, two sweaters
而 clothing 是一个集合名词, 比如people 一样, 比如一件衣服要说: an article of clothing, a piece of clothing.

dress: 穿衣服要用被动语态,比如: She is dressed in her everyday clothes.
clothes: 中的es不发iz, 而是发z音,所以是 【kl2uz】


git add 的好处还有一个: 在切换分支branch的时候, 这些 git add 暂存区 会一起 切换过去!

git branch 分支号 <之前的某次提交的id号>, 这个命令的作用是: 基于之前的 某次 提交commit id , 回滚到 之前的中间的某次提交, 并建立一个 分支,(回滚到之前的某次提交, 并且创建分支的好处是: 回滚后,不必覆盖 master分支. 从而起到 "另存为" 一个 提交点(快照) 的作用)

感觉 git 跟 一些管理 : 操作系统 复原/回滚/还原精灵的 有点类似, 可以任意的 在 某个 时间节点上, 创建快照, 然后可以 恢复到这些时间节点上, 而其他的保存的 时间节点 快照仍然存在!
git branch 新的分支号 : 就是基于 之前的某个分支号 创建新的 分支号.
也可以基于某个分支 , 创建新的分支! git branch new_branch old_branch