进阶

三种状态:
已提交(committed)、已修改(modified) 和 已暂存(staged)
已提交表示数据已经安全地保存在本地数据库中。
已修改表示修改了文件,但还没保存到数据库中。
已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

初次运行 Git :
设置用户名和邮件地址

$ git config --global user.name "AQxiong"
$ git config --global user.email 1821835442@qq.com

 

配置默认文本编辑器

$ git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

 

检查配置信息

$ git config --list

 

git config <key>: 来检查 Git 的某一项配置

$ git config user.name

 

两种获取 Git 项目仓库的方式:
1. 将尚未进行版本控制的本地目录转换为 Git 仓库;
2. 从其它服务器 克隆 一个已存在的 Git 仓库。

在已存在目录中初始化仓库

$ cd C:\Users\Administrator\Desktop\12
$ git init

跟踪文件并提交

$ git add *.c
$ git commit -m 'initial project version'

 

克隆现有的仓库

$ git clone https://gitee.com/aqxiong/wolong.git

 

检查当前文件状态:

git status

 

跟踪文件,使之处于暂存状态:

git add 

 


状态简览:  ( ?? :未跟踪; A :暂存区; 空M :修改过但尚未暂存;M空 :修改已暂存;MM :已修改)

git status -s

 

忽略文件:.gitignore 
.gitignore 的格式规范:
• 所有空行或者以 # 开头的行都会被 Git 忽略。
• 使用两个星号(**)表示匹配任意中间目录
• 问号(?)只匹配一个任意字符
• 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
• 以(/)开头防止递归。
• 以(/)结尾指定目录。
• 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。

 

比较工作目录中当前文件和暂存区域快照之间的差异: 

git diff

 

比对已暂存文件与最后一次提交的文件差异:

git diff --staged 

 

提交更新:
  选项:
  -m :将提交信息与命令放在同一行
  -a:把所有已经跟踪过的文件暂存起来一并提交

git commit

 

移除文件:
  选项:
  -f:删除之前修改过或已经放到暂存区的文件
   --cached : 希望文件保留在当前工作目录中,但不让 Git 继续跟踪

git rm 

 

删除所有名字以 ~ 结尾的文件

$ git rm \*~

 

文件改名

$ git mv 旧名 新名

 

查看提交历史:
    选项:
    -p:显示每次提交所引入的差异(限制显示的日志条目数量)
    --stat:每次提交的简略统计信息 
    --shortstat:只显示--stat中最后的行数修改添加移除统计。
    --name-only:仅在提交信息后显示已修改的文件清单。
    --name-status:显示新增、修改、删除的文件清单。
    --abbrev-commit:仅显示SHA-1校验和所有40个字符中的前几个字符。
    --relative-date:使用较短的相对时间而不是完整格式显示日期(比如“2weeks ago”)。
    --graph:在日志旁以ASCII图形显示分支与合并历史。
    --pretty:使用其他格式显示历史提交信息。可用的选项包括oneline、short、full、fuller和format(用来定义自己的格式)。
    --oneline:--pretty=oneline--abbrev-commit合用的简写。
git log

  限制输出长度:
  --since 和 --until 
$ git log --since=2.weeks
    -<n> 仅显示最近的 n 条提交。
    --since, --after 仅显示指定时间之后的提交。
    --until, --before 仅显示指定时间之前的提交。
    --author 仅显示作者匹配指定字符串的提交。
    --committer 仅显示提交者匹配指定字符串的提交。
    --grep 仅显示提交说明中包含指定字符串的提交。
    -S 仅显示添加或删除内容匹配指定字符串的提交


  --pretty=format:

        %H:提交的完整哈希值
        %h:提交的简写哈希值
        %T:树的完整哈希值
        %t:树的简写哈希值
        %P:父提交的完整哈希值
        %p:父提交的简写哈希值
        %an:作者名字
        %ae:作者的电子邮件地址
        %ad:作者修订日期(可以用 --date=选项 来定制格式)
        %ar:作者修订日期,按多久以前的方式显示
        %cn:提交者的名字
        %ce:提交者的电子邮件地址
        %cd:提交日期
        %cr:提交日期(距今多长时间)
        %s:提交说明

形象地展示分支、合并历史

$ git log --pretty=format:"%h %s" --graph

 

查看各个分支当前所指的对象

$ git log --oneline --decorate

 

在 Git 源码库中查看 Junio Hamano 在 2008 年 10 月其间, 除了合并提交之外的哪一个提交修改了测试文件

$ git log --pretty="%h - %s" --author='Junio C Hamano' --since="2008-10-01" \

 

重新提交: 

$ git commit --amend

 

取消暂存的文件:

git reset HEAD <file>

 


撤消对文件的修改:

git checkout -- <file>

 

远程仓库的使用:
查看远程仓库:
  选项 :
   -v:显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL

$ cd wolong
$ git remote 


  origin ——这是 Git 给你克隆的仓库服务器的默认名字

 

添加一个新的远程 Git 仓库,同时指定一个方便使用的简写:

$ git remote add <shortname> <url>

 

从远程仓库中获得数据,拉取所有没有的数据

$ git fetch <remote>

 git fetch 命令只会将数据下载到你的本地仓库——它并不会自动合并或修改你当前的工作

 

自动抓取后合并该远程分支到当前分支:

git pull

 


推送到远程仓库:
  remote:服务器
  branch:分支

git push <remote> <branch>

 

列出了哪些远程分支不在你的本地,哪些远程分支已经从服务器上移除了, 还有当你执行 git pull 时哪些本地分支可以与它跟踪的远程分支自动合并

$ git remote show <remote>

 

远程仓库的重命名

$ git remote rename 旧名 新名

 

远程仓库的移除

$ git remote remove <remote>
$ git remote rm <remote>

 

列出标签:
  选项:
  -l或 --list 

 git tag 

 

创建标签:Git 支持两种标签:轻量标签(lightweight)与附注标签(annotated)
附注标签

$ git tag -a v1.4 -m "my version 1.4"

 

看到标签信息和与之对应的提交信息: 

git show 

 

轻量标签

$ git tag <tagname>

 

过去的提交打标签:
查找提交历史:

$ git log --pretty=oneline

 

打标签:

$ git tag -a v1.2 校验和(7位)


共享标签:创建完标签后推送标签到共享服务器

git push origin <tagname>

 

一次性推送很多标签使用选项 --tags 

$ git push origin --tags

 

删除标签:
删掉本地仓库上的标签: 

git tag -d <tagname>


删除远程仓库上的标签

$ git push <remote> :refs/tags/<tagname> 
$ git push <remote> --delete <tagname>

 

检出标签:查看某个标签所指向的文件版本

$ git checkout <tagname>

 

Git 别名:如果不想每次都输入完整的 Git 命令,可以通过 gitconfig 文件来轻松地为每一个命令设置一个别名

$ git config --global alias.unstage 'reset HEAD --'

 

分支创建:

$ git branch 新分支

 

 分支切换:

$ git checkout 新分支

 

分支创建并切换:

$ git checkout -b 新分支

 

查看提交历史、各个分支的指向以及项目的分支分叉情况:

$ git log --oneline --decorate --graph --all

 

合并分支:

$ git merge 分支

 

删除分支:
  选项:
   -D :强制删除

$ git branch -d 分支

 

当分支的修改都涉及到同一个文件的同一处,在合并它们的时候就会产生合并冲突:

git status:查看状态
git mergetool:使用图形化工具来解决冲突

 

分支列表:
  选项:
  -v:查看每一个分支的最后一次提交
  --merged:查看哪些分支已经合并到当前分支
  --no-merged:查看所有包含未合并工作的分支

$ git branch

 

本地分支重命名(还未推送到远程)

git branch -m 新分支名称
git branch -m 旧分支名称 新分支名称

 

远程分支重命名(已推送远程)

git branch -m 旧分支名称 新分支名称

 

删除远程旧分支

git push --delete <remote> 旧分支名称

 

 将新分支推送远程

git push <remote> <branch>

 

将修改后的本地分支与远程分支相关联

git branch --set-upstream-to <remote>/新分支名称

 

远程仓库改名

#创建时
git clone -o ji https://gitee.com/aqxiong/testing-is.git

# 重命名远程仓库的名称
git remote rename origin ji

#查看状态
git remote -v


git fetch ji
git branch -u origin/<BRANCH>
git remote set-head origin -a

# 重命名本地分支
git branch -m master kun

# 删除远程仓库中的旧分支(gitee上好像删不了)
git push ji :master

# 推送新的分支到远程仓库
git push -u ji kun

 

posted @ 2025-01-07 23:24  阿Q熊  阅读(36)  评论(0)    收藏  举报