git基础教程
mac电脑github打不开教程
基本的Gt工作流程如下:
- 在工作区中修改文件。
- 将你想要下次提交的更改选择性地暂存,这样只会将更改的部分添加到暂存区。
- 提交更新,找到暂存区的文件,将快照永久性存储到Gt目录。
Git自带一个git config的工具来帮助设置控制Git外观和行为的配置变量
配置
通过以下命令查询github配置文件
git config --list --show-origin
配置用户信息
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
如果使用了--global
选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情,Git都会使用那些信息。当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有--global
选项的命令来配置
配置文本编辑器(可忽略)
例如用Emacs
git config --global core.editor emacs
检查配置信息
使用git config --list
命令来列出所有Git当时能找到的配置
可能会看到重复的变量名,因为Git会从不同的文件中读取同一个配置
这种情况下,Git会使用它找到的每一个变量的最后一个配置
通过输入 git config <key>
来检查Git的某一项配置
git基础指令
获取git仓库
通常有两种获取Git项目仓库的方式:
- 将尚未进行版本控制的本地目录转换为Git仓库;
- 从其它服务器克隆一个已存在的Git仓库。
将尚未进行版本控制的本地目录转换为Git仓库
初始化仓库
进入到当前目录,执行
git init
该命令将创建一个名为.git
的子目录,这个子目录含有你初始化的Git仓库中所有的必须文件,这些文件是Git仓库的骨干。但是,在这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪
如果在一个已存在文件的文件夹(而非空文件夹)中进行版本控制,你应该开始追踪这些文件并进行初始提交。可以通过git add
命令来指定所需的文件来进行追踪,然后执行git commit
git add *.c
git add LICENSE
git commit -m 'initial project version'
具体解释见后面部分
克隆仓库
命令为git clone <url>
例子
git clone https://github.com/libgit2/libgit2
也可自定义仓库名
git clone https://github.com/libgit2/libgit2 mylibgit
定义仓库名为mylibgit
记录每次更新到仓库
检查文件状态
指令
git status
查看哪些文件处于什么状态
使得查看的状态信息简化的指令
git status -s
git status --short
- 新添加的未跟踪文件前面有 ?? 标记
- 新添加到暂存区中的文件前面有 A 标记
- 修改过的文件前面有 M 标记
跟踪新文件
指令
git add <files>
如果参数是目录的路径,该命令将递归地跟踪该目录下的所有文件
运行git add后即将文件储存在暂存区
忽略文件
创建一个名为.gitignore
的文件,列出要忽略的文件的模式
.gitignore
文件的编写规则如下
- 所有空行或者以 # 开头的行都会被 Git 忽略。
- 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
- 匹配模式可以以(/)开头防止递归。
- 匹配模式可以以(/)结尾指定目录。
- 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。
glob模式规则
- 星号(*)匹配零个或多个任意字符;
- [abc] 匹配任何一个列在方括号中的字符 ;
- 问号(?)只匹配一个任意字符;
- 如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配
- 使用两个星号(**)表示匹配任意中间目录
例子
# 忽略所有的 .a 文件
*.a
# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a
# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
/TODO
# 忽略任何目录下名为 build 的文件夹
build/
# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf
查看已暂存和未暂存的修改
查看尚未暂存的文件更新了哪些部分
git diff
git diff本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动
查看已暂存的将要添加到下次提交里的内容
git diff --staged
git diff --cached
提交更新
git commit
编辑器会显示文本信息
默认的提交消息包含最后一次运行git status的输出,放在注释行里,另外开头还有一个空行,供你输入提交说明
也可以在 commit 命令后添加 -m 选项,将提交信息与命令放在同一行
例子
git commit -m "Story 182: Fix benchmarks for speed"
跳过使用暂存区域
git commit
加上-a
选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add
步骤
移除文件
git rm
从已跟踪文件清单中移除,并连带从工作目录中删除指定的文件
如果要删除之前修改过或已经放到暂存区的文件,则必须使用强制删除选项 -f
另外一种情况是,我们想把文件从Git仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。换句话说,你想让文件保留在磁盘,但是并不想让Git继续跟踪。当你忘记添加.gitignore
文件,不小心把一个很大的日志文件或一堆.a
这样的编译生成文件添加到暂存区时,这一做法尤其有用。为达到这一目的,使用--cached
选项
git rm --cached README
git rm
命令后面可以列出文件或者目录的名字,也可以使用glob模式
移动文件
不仅可以移动文件,也可以改名
git mv file_from file_to
查看提交历史
git log
具体参考此网站
撤销操作
重新提交指令
git commit --amend
第二次提交将代替第一次提交的结果
取消暂存的文件
git reset HEAD <file>...
撤销文件修改
git checkout -- <file>...
远程仓库的使用
查看远程仓库
git remote
列出你指定的每一个远程服务器的简写
git remote -v
会显示需要读写远程仓库使用的Git保存的简写与其对应的URL
添加远程仓库
git remote add <shortname> <url>
从远程仓库中抓取与拉取
git fetch <remote>
这个命令会访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。
如果你使用 clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写。 所以,git fetch origin
会抓取克隆(或上一次抓取)后新推送的所有工作。必须注意 git fetch 命令只会将数据下载到你的本地仓库——它并不会自动合并或修改你当前的工作。当准备好时你必须手动将其合并入你的工作
可以用git pull
命令来自动抓取后合并该远程分支到当前分支
推送到远程仓库
git push <remote> <branch>
查看某个远程仓库
git remote show <remote>
远程仓库的重命名与移除
重命名
git remote rename
移除
git remote remove
打标签
列出标签
git tag
按照通配符列出标签需要 -l 或 --list 选项
例子
git tag -l "v1.8.5*"
创建标签
Git支持两种标签:轻量标签与附注标签
轻量标签很像一个不会改变的分支——它只是某个特定提交的引用。
而附注标签是存储在Git数据库中的一个完整对象,它们是可以被校验的,其中包含打标签者的名字、电子邮件地址、日期时间,此外还有一个标签信息,并且可以使用GNU Privacy Guard (GPG)签名并验证。通常会建议创建附注标签,这样你可以拥有以上所有信息。但是如果你只是想用一个临时的标签,或者因为某些原因不想要保存这些信息,那么也可以用轻量标签。
附注标签
在Git中创建附注标签十分简单。最简单的方式是当你在运行tag命令时指定-a
选项
例子
git tag -a v1.4 -m "my version 1.4"
使用git show
命令可以看到标签信息和与之对应的提交信息
轻量标签
不需要使用 -a、-s 或 -m 选项,只需要提供标签名字
后期打标签
可以在之后补上标签。要在那个提交上打标签,你需要在命令的末尾指定提交的校验和(或部分校验和)
查看校验和命令
git log --pretty=oneline
共享标签
git push origin <tagname>
删除标签
git tag -d <tagname>
但这需要push
git push <remote> :refs/tags/<tagname>
或
git push origin --delete <tagname>
git分支
创建分支
git branch
切换分支
git checkout
项目分岔历史
git log --oneline --decorate --graph --all
会输出你的提交历史、各个分支的指向以及项目的分支分叉情况
合并分支
git merge
图形化工具解决冲突
git mergetool
git-scm