Git本地操作


Git 是一个工具,工具只有熟练与不熟练之分,没有会与不会之别。孰能生巧,多敲几遍看看效果,如果对你工作有方便,那么记住它就是了,如果记不住就多试几次,这一章的操作只涉及本地操作,所有代码的修改都不会影响远程仓库的代码,也就是说你可以随便玩,而且永远不会把代码玩坏,想要恢复的话只要干掉本地分支,重新建立一个分支追踪远程分支就好。

使用 Git 你的代码存储的位置变化

工作区(working space) -> 暂存区(staging)-> 本地仓库(Local Repository)-> 远程仓库(Remote Repository)

你的代码状态变化

已修改为跟踪->已跟踪为提交->已提交未发布

查看分支的状态

#是否有已修改未暂存的文件,有的话用 git add 命令暂存。是否有已暂存未提交的文件,有的话用git commit -m " " 命令提交。
$ git status

#也许能提高速度
$ git status -uno

查看分支情况

#总共有那些分支,当前处于那个分支
$ git branch
# 查看远程分支
$ git branch -r
# 查看本地和远程分支
$ git branch -r
# 删除分支。
$ git branch -d +分支名
# 重命名分支
$ git branch -m 原名 新名

git add 操作

使用 “git add …” 以包含要提交的内容

#添加已修改未暂存的所有文件,也就是跟踪所有文件。未跟踪的文件标记为红色,已跟踪的文件标记为绿色。
git add .
#添加指定的已修改未暂存的文件到暂存区。
git add + 文件

git rm 操作

使用 “git rm --cached …” 撤出暂存区

git commit 操作

#提交代码到本地仓库,-m 中的m是message的意思,就是添加一个标记信息,方便查看提交历史,git log 可以查看代码提交日志。
git commit -m "xxx"

#可以修改最后一次提交的信息
git commit --amend

git 查看提交历史记录

# 如果不带任何参数,它会列出所有历史记录,最近的排在最上方,显示提交对象的哈希值,作者、提交日期、和提交说明。
$ git log #按q退出历史记录列表。
# 以选择显示前n条。
$ git log -n
# 显示简要的增改行数统计,每次提交文件的变更统计,-n 同上,前n条,可省略。
$ git log --stat -n
# 此命令同上,不过显示更全了。
$ git log -p -n
$ git log --pretty=oneline
# 一行显示,只显示哈希值和提交说明。
$ git log --graph #ASCII 字符串表示的简单图形,形象地展示了每个提交所在的分支及其分化衍合情况
如两天前的提交历史:git log --since=2.days
如指定作者为"BeginMan"的所有提交:$ git log --author=BeginMan
如指定关键字为“init”的所有提交:$ git log --grep=init
如指定提交者为"Jack"的所有提交:$ git log --committer=Jack
注意作者与提交者的关系:作者是程序的修改者,提交者是代码提交人。
如指定2天前,作者为“BeginMan”的提交含有关键字'init'的前2条记录:$ git log --since=2.days --author=BeginMan --grep=init -2
注意:上面选项后面的参数可以带单双引号,如--author="BeginMan"

git checkout 操作

# 切换到指定的分支
$ git checkout +分支名
# 新建一个分支并切换到该分支,-b就是分支的意思,切换分支,没有的话就新建一个分支出来并切换到新分支,删除分支用 git branch -d +分支名。
$ git checkout -b + 分支名
# 新建一个分支并切换到该分支,-b就是分支的意思,切换分支,没有的话就新建一个分支出来并切换到新分支,删除分支用 git branch -d +分支名,追踪远程分支
$ git checkout -b + 分支名 远程分支
# 放弃对文件的修改,回到上次提交之后本次修改之前的原始状态。
$ git checkout + 文件名

git 暂存操作

# git栈,在切换分支的时候,当前分支有未完成提交的代码,但又不想提交,一方面是因为代码没有完成,一方面是因为这样会在log中打印许多无用的日志信息。但是不提交就无法切换分支,于是git便开辟出来一个临时的仓库,这个仓库可以暂时存放最新修改过的代码。
# git栈,可以存放多次修改,切换分支后这些存放的修改还在。
$ git stash #保存当前的工作进度,会分别对暂存区和工作区的状态进行保存。保存后工作区恢复到之前最后一次提交的状态
显示进度列表。此命令显然显示了git stash 可以多次保存工作进度,并在恢复时候选择。
$ git stash list
$ git stash pop [--index] [<stash>]
# 如果不使用任何参数,会恢复最新保存的工作进度,并将恢复的工作进度从存储的git栈列表中清除。如果提供<stash>参数(来自git stash list显示的列表),则将<stash>工作进度恢复。恢复完毕也将从git栈删除<stash>工作进度。
$ git stash [save [--patch] [-k|--[no]keep-index] [-q|--quiet] [<message>]] #这条命令实际上是第一条git stash命令的完整版。使用参数--patch会显示工作区和HEAD的差异,通过对差异文件的编辑决定在进度中最终要保存的工作区的内容,通过编辑差异文件可以在进度中排除无关内容。使用-k或者--keep-index参数,在保存进度后不会将暂存区重置。默认会将暂存区和工作区强制重置。
# 除了不删除恢复的进度之外,其余和git stash pop 命令一样。
$ git stash apply [--index] [<stash>]
# 删除一个存储的进度。默认删除最新的进度。
$ git stash drop [<stash>]
# 删除所有存储的进度。
$ git stash clear
# 查看git栈中相对与当前分支的修改
$ git stash show -p stash{?}

git 标签操作

# 列显已有的标签
$ git tag = git tag -l
# git标签分为两种类型:轻量标签和附注标签。轻量标签是指向提交对象的引用,附注标签则是仓库中的一个独立对象。建议使用附注标签。
# 创建轻量标签,创建轻量标签不需要传递参数,直接指定标签名称即可。
$ git tag v0.1.2-light
# 创建附注标签
$ git tag -a v0.1.2 -m “0.1.2版本” # 创建附注标签时,参数a即annotated的缩写,指定标签类型,后附标签名。参数m指定标签说明,说明信息会保存在标签对象中。
# 切换标签
$ git checkout [tagname]
# 用git show命令可以查看标签的版本信息
# 删除标签
$ git tag -d [tagname]
# 打标签不必要在head之上,也可在之前的版本上打,这需要你知道某个提交对象的哈希码(通过git log获取)。
# 补打标签
$ git tag -a "标签名" 哈希码
# 通常的git push不会将标签对象提交到git服务器,我们需要进行显式的操作:
$ git push origin 标签名 # 将v0.1.2标签提交到git服务器
$ git push origin –tags # 将本地所有标签一次性提交到git服务器

git clean 操作

git clean(只是删除未跟踪的文件)

-n  显示将要删除的文件和目录
-f  删除文件
-df 删除文件和目录

git reset 操作

# 回到上次提交前的状态,本地的修改和暂存区的跟踪都在。这是最柔软的退回。
$ git reset --soft HEAD^(或SHA码):
# 下面两个命令是一样的,回到上次暂存时的状态,本地的修改还在,但是暂存区中的跟踪已经不再,提交也不在了。
# HEAD^代表本次提交的父提交,可以换成任意次提交的sha码
$ git reset HEAD^
$ git reset --mixed HEAD^
# 直接退回到上次提交的状态,本地修改什么的都不复存在了是最强硬的退回。
$ git reset --hard HEAD^
# add错了,从暂存区中删除,但保留更改,如果不加参数,代表删除所有暂存。
$ git reset HEAD +文件名

git revert

# 撤销某次的提交内容(Revert a commit by providing a new commit with contrary changes)
$ git revert  <commit>              
# 撤销某次提交的某个文件的内容(Revert a specific file from a previous commit)
$ git checkout <commit> <file>

git pull

git pull -p # 等同于下面的命令
git fetch --prune origin
git fetch -p

git 分支对比

# 查看 dev 有,而 master 中没有的:
$ git log dev ^master
# 查看 dev 中比 master 中多提交了哪些内容:
$ git log master..dev
# 不知道谁提交的多谁提交的少,单纯想知道有什么不一样:
git log dev...master
# 在上述情况下,再显示出每个提交是在哪个分支上
git log --left-right dev...master

git 移除原来的远程地址并添加新的远程地址

要移除现有的远程仓库地址并切换到另一个远程仓库,你可以按照以下步骤操作:

  1. 首先,使用以下命令查看当前已配置的远程仓库地址:
    git remote -v
  2. 确认你要移除的远程仓库的名称。假设你要移除的远程仓库名称为"origin"。
  3. 使用以下命令移除现有的远程仓库地址:
    git remote remove origin
  4. 接下来,添加新的远程仓库地址。假设你要添加的远程仓库地址为"https://github.com/example/new-repo.git",并将其命名为"new-origin":
    git remote add new-origin https://github.com/example/new-repo.git
  5. 确认新的远程仓库地址已成功添加:
    git remote -v
    现在你已经成功移除了现有的远程仓库地址并切换到新的远程仓库地址。

评论
  目录