git命令的学习

文件的状态:

  • Untracked 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.

  • Unmodified文件已经入库,未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改,
    而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件

  • Modified文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态,
    使用git checkout 则丢弃修改过, 返回到unmodify状态,

  • Staged暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态.
    执行git reset HEAD filename取消暂存, 文件状态为Modified

git相关命令

git config

git 的设置使用 git config 命令。
显示当前的 git 配置信息: git config --list
编辑 git 配置文件: git config -e # 针对当前仓库
或者: git config -e --global # 针对系统上所有仓库
设置提交代码时的用户信息: git config --global user.name “runoob”
git config --global user.email test@runoob.com
如果去掉 --global 参数只对当前仓库有效。

查看用户名: git config user.name
查看密码: git config user.password
查看邮箱: git config user.email
修改用户名: git config --global user.name “xxxx(新的用户名)”
修改密码: git config --global user.password “xxxx(新的密码)”
修改邮箱: git config --global user.email “xxxx@xxx.com(新的邮箱)”
查看配置信息:git config --list

修改本地仓库内全部用户信息(当有多个用户时):
$ git config --global --replace-all user.name “你的 git 的名称”
$ git config --global --replace-all uesr.email “你的 git 的邮箱”

1.添加
$ git config --global user.name “yourName”
$ git config --global user.email “your@email.com”

2.修改
(1)覆盖的形式:
$ git config --global user.name “yourName”
$ git config --global user.email “your@email.com”

(2)替换的形式:
$ git config --global --replace-all user.name “yourName”
$ git config --global --replace-all user.email “your@email.com”

3.删除
$ git config --global --unset user.name “yourName”
$ git config --global --unset user.email “your@email.com”

git clone

拷贝一份远程仓库,也就是下载一个项目( 从现有 Git 仓库中拷贝项目)

git branch

列出分支(无参数时,会列出你在本地的分支)
$ git branch
* master

此例的意思就是,我们有一个叫做 master 的分支,并且该分支是当前分支。
当你执行 git init 的时候,默认情况下 Git 就会为你创建 master 分支。
如果我们要手动创建一个分支。执行 git branch (branchname) 即可。
git branch #查看当前本地分支
git branch -a #查看本地所有分支
git branch 分支名称 #创建分支命令
git checkout 分支名称 #切换分支命令
git checkout -b #一步创建并切换
git merge分支名称 #合并分支命令
(合并前切换到要被合并到的分支上,输入命令将另一支合并过来)
git branch -d 分支名称 #删除分支命令
git branch -D 分支名称 #强制删除分支
git branch -m 旧分支名 新分支名 #更改分支名称

git cherry-pick

git cherry-pick C2 #将其他分支复制到当前指令下(*)

在 Git 2.23 版本中,引入了一个名为 git switch 的新命令,最终会取代 git checkout,因为 checkout 作为单个命令有点超载(它承载了很多独立的功能)。

git status

查看仓库当前的状态,显示有变更的文件

git blame

如果要查看指定文件的修改记录

git mv file.txt file2.txt

重命名文件

git reset

回退版本
git reset HEAD^ # 回退所有内容到上一个版本
git reset HEAD^ hello.php # 回退 hello.php 文件的版本到上一个版本
git reset 052e # 回退到指定版本
git reset 命令用于回退版本,可以指定退回某一次提交的版本
git reset --hard commitID 或git reset commitID --hard

git revert

撤销某次操作
git revert HEAD #撤销前一次 commit
git revert HEAD^ #撤销前前一次 commit
git revert commit #撤销指定的版本,撤销也会作为一次提交进行保存。
git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容;撤销某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销,作为一次最新的提交。

git revert 和 git reset的区别

git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
1、在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
2、git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。

revert理解

revert 可以取消指定的提交内容。当讨论 revert 时,需要分两种情况,因为 commit 分为两种:一种是常规的 commit,也就是使用 git commit 提交的 commit;
另一种是 merge commit,在使用 git merge 合并两个分支之后,你将会得到一个新的 merge commit
merge commit 和普通 commit 的不同之处在于 merge commit 包含两个 parent commit,代表该 merge commit 是从哪两个 commit 合并过来的。

git diff

用于显示提交和工作树等之间的更改
git diff # 比较当前文件和暂存区文件差异
git diff # 比较两次提交之间的差异
git diff # 在两个分支之间比较
git diff --staged # 比较暂存区和版本库差异
git diff --cached # 比较暂存区和版本库差异
git diff --stat # 仅仅比较统计信息

git merge

合并分支命令
git merge newtest 将 newtest 分支合并到主分支去
git pull 下载远程代码并合并
git push 下载远程代码并合并
git tag 打上标签

git rebase -i HEAD~n

排序
(n为节点个数)弹出UI窗口,拖动修改顺序,删除或保留。( rebase -i 对提交记录进行重新排序)

第二种合并分支的方法是 git rebase。Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。

Rebase 的优势就是可以创造更线性的提交历史,这听上去有些难以理解。如果只允许使用 Rebase 的话,代码库的提交历史将会变得异常清晰。

HEAD 说明

HEAD 表示当前版本
HEAD^ 上一个版本
HEAD^^ 或 HEAD^2 上上一个版本
HEAD^^^ 或HEAD^3 上上上一个版本
以此类推…
HEAD~0 表示当前版本
HEAD~1 上一个版本
HEAD~2 上上一个版本
HEAD~3 上上上一个版本
以此类推…

HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。
HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。
HEAD 通常情况下是指向分支名的(如 bugFix)。在你提交时,改变了 bugFix 的状态,这一变化通过 HEAD 变得可见。
如果想看 HEAD 指向,可以通过 cat .git/HEAD 查看, 如果 HEAD 指向的是一个引用,还可以用 git symbolic-ref HEAD 查看它的指向。

使用 ^ 向上移动 1 个提交记录
Git 默认选择合并提交的“第一个”父提交,在操作符 ^ 后跟一个数字可以改变这一默认行为。
首先看看操作符^。把这个符号加在引用名称的后面,表示让 Git 寻找指定提交记录的父提交。所以 main^ 相当于“main 的父节点”。main^^ 是 main 的第二个父节点。
新建一个分支bugWork,父提交(单)( 第二次)父提交(两个) 父提交(单)
git branch bugWork main^2
使用 ~ 向上移动多个提交记录,如 ~3
该操作符后面可以跟一个数字(可选,不跟数字时与 ^ 相同,向上移动一次),指定向上移动多少次。
git chechkout HEAD^
git checkout HEAD^^
git checkout HEAD~3

可以直接使用 -f 选项让分支指向另一个提交。例如:
git branch -f main HEAD~3 #将main分支强制指向HEAD的第3级父提交

git branch -f bugFix C0 #分支bugFix移到节点C0
git branch -f main C6 #分支main移到节点C6

提交推送

git add .
git commit -m “xxxxx” (为提交的项目添加解释信息)
git push origin HEAD:refs/for/master (推送命令,推送到远程分支名 master)
(git push 远程主机名 本地分支名:远程分支名 其中“HEAD:refs/for”一般是固定的,只需对应修改远程主机名和远程分支名即可)

1.提交暂存区内容到本地仓库的当前分支
git commit -m ‘注释内容’

2.添加工作区一个或多个文件的修改到暂存区
git add 单个文件名|通配符(.)
git add file.txt
git add .

git commit 的退出

Vim:按Esc键退出编辑模式;
vim就是进入文本编辑的命令,按键 i 进入编辑模式,Esc退出编辑模式,:wq 保存退出到终端界面。
保存并退出:英文模式下输入 :wq ,然后回车
不保存并退出:英文模式下输入 :q! ,然后回车
英文模式下输入 :qa! ,然后回车

git log

查看历史提交记录
退出:出现END,英文状态下按q退出

git show

查看每次提交的详情

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值