进阶
三种状态:
已提交(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 旧名 新名
git log
限制输出长度:
--since 和 --until
$ git log --since=2.weeks
--pretty=format:
形象地展示分支、合并历史
$ 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