Git学习笔记
博客专区 > alazyer 的博客 > 博客详情
Git学习笔记
alazyer 发表于2年前
Git学习笔记
  • 发表于 2年前
  • 阅读 29
  • 收藏 1
  • 点赞 1
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

三种状态

Git主要有三种状态,你的文件可能处于其中之一:

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

工作目录、暂存区域以及 Git 仓库

由此引入 Git 项目的三个工作区域的概念:

  1. Git仓库: Git 用来保存项目的元数据和对象数据库的地方。这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
  2. 工作目录: 对项目的某个版本独立提取出来的内容。这些从Git仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
  3. 暂存区域: 一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作“索引”,不过一般说法还是叫暂存区域。

基本的 Git 工作流程如下:

  1. 在工作目录中修改文件。
  2. 暂存文件,将文件的快照放入暂存区域。
  3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

其实上述三个状态还可以统称为已追踪(traced),git中还有其他的状态:

  1. 未追踪(untraced): 如果一个文件从来没有使用git add添加过(并且不是git clone下来的)的话, 处于这个状态。
  2. 未修改(unmodified): git clone下来后,或者git commit后文件处于这个状态。

文件的状态变化周期


git config

要想使用git,首先需要进行一些配置,使用到的命令都以git config开头。

git使用多个文件来保存用户的喜好(自定义设置),包含: 1. /etc/gitconfig: 包含系统上每一个用户及他们仓库的通用配置如果使用带有--system选项的 git config 时,它会从此文件读写配置变量 2. ~/.gitconfige或者~/.config/git/config: 只针对当前用户。可以传递--global选项让 Git 读写此文件。 3. <repo_base>/.git/config: 针对所在仓库。可以传递--local选项让 Git读写此文件。

每一个级别覆盖上一级别的配置。比如,<repo_base>/.git/config的配置变量会覆盖 /etc/gitconfig中的配置变量。

查看所有配置,包含system, global和local。

git config --list或者简写为git config -l

可以通过传入参数--<file-option>查看指定地点的配置

git config --system -l

git config --global -l

git config --local -l

设置用户名

git config --global user.name alazyer

设置用户邮箱

git config --global user.email alazyer@gmail.com

设置默认编辑器

git config --global core.editor vim

为checkout设置别名(alias)co,则git co就等价于git checkout

git config --global alias.co checkout


git init

以本文件夹目录为基础创建一个仓库

git init

在当前目录下新建名称为alazyer的仓库

git init alazyer


git clone

克隆远程仓库

git clone git@github.com:alazyer/alazyer.github.com.git

git clone后,远程仓库默认叫做origin,可以使用-o选项自定义远程仓库名称

git clone -o blog git@github.com:alazyer/alazyer.github.com.git

克隆远程仓库, 并自定义本地仓库名称

git clone git@github.com:alazyer/alazyer.github.com.git alazyer-blog


git remote

添加远程仓库

git remote add origin git@github.com:alazyer/alazyer.git

显示仓库名称以及对应远程url

git remote -v

查看远程仓库更多信息

git remote show origin

远程仓库重命名

git remote rename ole_origin new_origin

修改远程仓库地址

git remote set-url origin https://github.com/alazyer/alazyer.git

删除远程仓库

git remote remove origin


git status

查看仓库当前状态

git status


git diff

查看工作目录与暂存区域区别

git diff

查看暂存区域与Git仓库之间区别

git diff --cached或者git diff --staged


git add

添加文件到staged状态

git add <file[s]_modified>

添加目录到staged状态

git add <directory_name>


git rm

移除某个文件,并且从工作目录中删除

git rm <file[s]_removed>

移除文件,但是工作目录不删除该文件

git rm --cached <file[s]_removed>


git commit

提交暂存区域文件到Git仓库

git commit -m '<commit_message>'

添加所有修改的有追踪关系(traced)文件,并提交,等同于git add后`git commit```

git commit -a

使用--fixup或者--squash选项,并结合git rebase保证日志的清爽

git log --oneline

git commit --fixup <previous_commit_id>

git log --oneline

git rebase -i --autosquash <commit_id_before_previous>

git log --oneline


git fetch

将远程仓库全部(所有分支)更新取到本地

git fetch origin

将远程master分支更新取到本地

git fetch origin master


git pull

取回远程主机gh-pages分支的更新,并和本地的master分支合并

git pull origin gh-pages:master

取回远程主机gh-pages分支的更新,并和本地当前分支合并

git pull origin gh-pages

取回与本地当前分支有追踪关系的远程分支,并和当前分支合并

git pull origin


git push

将本地master分支推送到远程仓库gh-pages分支

git push origin master:gh-pages

将指定的本地分支master分支推动到远程对应追踪关系的分支,如果没有追踪关系会在远程新建同名分支

git push origin master

将本地所在当前分支推送到远程对应有追踪关系的分支

git push origin

删除远程某个分支

git push origin :remote_branch


git revert

丢弃某次提交的所有内容。该次提交还可以在git log中查看到。

git revert <commit_id> git-revert


git reset

git revert和git reset都可以用来清楚提交,但是相对来说git revert要更安全一些,二者区别可见下图。

git-revert-vs-reset

取消暂存的文件

git reset HEAD <file[s]_staged>

重写提交历史。(回滚到指定commit_id处,该commit_id之后的所有提交不再能从git log中看到。但是所有提交修改的内容会在工作目录中出现,可以使用git commit -a进行提交,达到修改提交历史的目的)

git reset <commit_id>

git commit -a


git clean

将git仓库中所有没有被追踪(untraced)文件清楚掉。

git clean

要想上面这个方法有效的话,需要保证设置过clean.requireForce为false

git config --global clean.requireForce false 否则会提示使用-i -n -f

交互式的清楚未追踪(untraced)文件,使用这个命令会要求输入y确认删除

git clean -i

仅仅查看使用git clean -f会删除那些文件(并未真正删除)

git clean -n

上述命令只清楚文件,要想删除目录需要使用-d选项

git clean -d -n git clean -d -f

git log

查看git仓库的所有日志

git log

查看某个文件所有日志记录

git log <file_name>

查看来自指定作者的提交记录

git log --author=alazyer

查看日志信息中包含指定信息的日志记录

git log --grep=pattern

每行显示一次提交(显示信息包含:commit_id, commit_msg)

git log --oneline或者git log --pretty=oneline


git reflog

查看git仓库中所有的操作日志(即使已被git reset也可看到)

git reflog


git checkout

丢弃对文件的修改(此时文件处于modified状态);如果文件已经通过git add过(此时文件处于staged状态),则需要首先使用git reset将文件状态改为modified。

git reset HEAD <file[s]_staged>

git checkout -- <file[s]_modified>

以当前分支状态为基础创建新分支,并切换到该分支

git checkout -b <new_branch>

以origin/gh-pages为基础,新建pages分支,并切换

git checkout -b pages gh-pages

切换分支

git checkout <branch_to_switch>

切换到某次提交

git checkout <commit_id>

git tag

查看所有标签(tag)

git tag或者git tag -l

查看包含指定信息的标签

git tag -l <pattern>

打标签v1.0,使用-a选项会有更多的功能

git tag [-a] v1.0

给之前的提交打标签v0.4

git tag [-a] v0.4 <commit_id>

删除标签v0.4

git tag -d v0.4

git branch

查看所有分支

git branch -a

查看远程分支

git branch -r

新建分支gh-pages

git branch gh-pages

查看哪些分支已经合并[未合并]到当前分支

git branch --merged

git branch --no-merged

手动设置追踪关系

git branch --set-upstream master origin/next


git merge

将gh-pages分支合并到master分支 首先,git checkout master,然后,git merge gh-pages

删除gh-pages分支

git branch -d gh-pages

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 4
博文 65
码字总数 34355
×
alazyer
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: