Git简要教程

Yizumi Konata Lv3

廖雪峰官方网站git教程

基本概念

工作区:电脑里能看到的目录称为工作区

版本库:工作区中的一个隐藏的.git目录

暂存区:在版本库中,git add将文件提交到的位置

HEAD指针:指向当前分支当前版本的指针

工作区与版本库

分支:最开始git会为我们创建一个master分支,提交在master分支上的版本在一条时间线上,而创建新的分支相当于另外开辟一条线,在新开辟的线上提交,原来的线是不会发生变化的。必要时可以将分支与分支合并。

master分支

新建dev分支

在dev分支上提交

合并:将一个分支合并到另一个分支上称为合并。合并有两种模式,以将dev分支合并到master分支上为例,一种是“快进模式”,即直接将master指针指向dev,如下面第一幅图,另一种是普通模式合并,即将dev当前版本提交至master,如下面第二幅图。快进模式提交后看不出来曾经做过合并,普通模式提交有历史记录。

快进模式合并

普通模式合并

冲突:若两个分支之间分别各自有新的提交,则无法进行合并,需要先解决冲突。合并发生冲突时冲突的位置会在文本中使用⽤<<<<<<<冲突内容1=======冲突内容2>>>>>>>标出,需要我们将此部分进行修改后再提交,便修复了冲突并完成分支合并。

冲突

修复冲突

常用命令

初始化设置:git config --global user.name "NAME" git config --global user.email "EMAIL@email.com",引号里填上用户的名字和邮箱。

创建版本库:git init

将文件添加到暂存区:git add FILENAME

将所有文件添加到暂存区:git add *

准备删除工作区和暂存区中的文件:git rm FILENAME

删除文件夹需要加-r参数:git rm -r FILENAME

删除文件后git status会提醒你有修改,这时使用git rm命令,其他的修改都是使用git add命令

将暂存区内容提交到仓库:git commit -m "TIPS"

查看仓库当前状态:git status

查看文件修改内容:git diff FILENAME

查看历史提交记录:git log

输入Q即可退出,嫌信息太多可以加上参数--pretty=onelinegit log沿时间线显示提交历史,只会显示到HEAD指针指向的版本,这意味着发生版本回退之后无法通过git log显示晚于回退后HEAD指针指向的版本。可以理解为git log是一本历史书,当使用时光机从二十一世纪穿越回十九世纪后,历史书也变成十九世纪的历史书了。

查看历史操作:git reflog

git reflog是git的操作历史,沿用前面的比喻,git log是历史书,则git reflog是时光机的使用记录。

更改版本库文件版本:git reset --hard commit id

回退至当前版本的前几个版本:git reset --hard HEAD^,回退几个加几个^

更改版本库文件版本时工作区也会更新

丢弃工作区的修改:git checkout --FILENAME撤回到最近一次的commitadd的状态

注意--

回退暂存区的修改:git reset HEAD FILENAME

创建并切换至新创建分支:git checkout -b BranchName

创建新分支:git branch BranchName

切换分支:git checkout BranchName

查看所有分支:git branch

删除分支:git branch -d "Name"强行删除用大写的-D

快进模式将其他分支合并至当前分支:git merge BranchName

普通模式合并:git merge --no-ff -m "Tips"

查看分支合并图:git log --graph

隐藏当前工作现场:git stash,使用后再使用git status会发现工作区是干净的

查看所有隐藏列表:git stash list

恢复隐藏内容但不删除隐藏列表里的内容:git stash apply

删除隐藏列表里的内容:git stash drop

恢复隐藏内容并删除列表里的内容:git stash pop

当手头工作没有commit时若直接开辟新的分支,则未完成的新工作会被带到新分支里,此时就需要先用 git stash隐藏未完成的工作后再创建新分支。

关联远程仓库:git remote add origin YourRespositoryAddress

将远程库克隆至本地:git clone YourRespositoryAddress

在关联或克隆远程库时 YourRespositoryAddress可以使用ssh,也可以使用https协议,ssh最快。分支克隆下来有一般只能看到master

在本地创建远程库的某分支:git checkout -b BranchName origin/BranchName

指定本地分支与远程分支关联:git branch --set-upstream BranchName origin/BranchName

查看远程库信息:git remote origin或者git remote -v

将本地某分支提交至远程库对应分支:git push origin BranchName

首次提交时加上-u参数设置默认主机:git push -u origin master,则以后向origin上提交时可以直接用git push。省略分支时默认推送当前分支,在后面加上:RemoteBranch相当于向originRemoteBranch分支推送。

将远程库某分支拉取并于本地某分支合并: git pull origin RemoteBranch:LocalBranch

省略最后的:LocalBranch则默认与当前分支合并,若当前分支已与远程分支对应则可以直接使用git pull

为当前分支某版本打标签:git tag TagName CommitId

指定标签信息:git tag -a TagName -m "Tips" CommitId

CommitId默认值为当前版本

显示所有标签:git tag

显示某个标签的信息:git show TagName

删除标签:git tag -d TagName

推送本地标签到远程:git push origin TagName

一次性推送所有标签:git push origin --tags

删除远程标签:git push origin :refs/tags/TagName

其他使用方法

忽略特殊文件:在工作区根目录下自行编写.gitignore文件而后提交到版本库即可,git不会追踪编写在.gitignore中的文件和文件夹的变化。编写的基本语法规则为:#后的文字为注释,每行放一个指定的被忽略的文件或文件夹,!表示不忽略指定的文件;文件或文件名的字符串匹配规则可按正则表达式书写。

配置别名:使用命令git config --global alias.Alias OriginalName即可为OriginalName命令设置一个别名Alias,若OriginalName为命令组合则加上引号。

设置显示格式:可以为git log设置显示格式,除了前面的--pretty=oneline,还可以用--pretty=format:''格式化设置显示格式。然而我不会设置例如使用git log --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s%Cgreen(%cr)%C(bold blue)<%an>%Creset'可以让你的日志很好看~

使用GitHub

初次使用时先注册github账号,然后按以下步骤操作

  1. 若在用户主目录下没有.ssh文件夹或文件夹中没有有id_rsa和id_rsa.pub这两个文件,则在Windows下先在用户主目录下打开GitBash(不知道在别的地方打开行不行,Mac下直接打开Shell就行了),输入ssh-keygen -t rsa -C "EMAIL@email.com",然后一路回车以获得.ssh文件夹以及两个文件
  2. 登录github,点击右上角用户头像右侧的下拉菜单,点击Settings,然后点击左侧列表的SSH and GPG keys,然后点击右侧绿色按钮New SSH key,填上任意Title,在Key文本框内粘贴用户主目录下.ssh文件夹中id_rsa.pub文件中的内容。
  3. 点击Add Key

之后就可以使用GitHub远程仓库了,在主页面下点击New或者点击右上角加号下的New repositoy创建新仓库,设置好后便可以看到新仓库的地址,可以用该地址与本地库关联

若想要参加开源项目,首先找到一个开源项目,点击Fork,则自己的账号下就会被克隆一个该项目仓库,让后从自己的账号下clone到本地进行修改推送。若从他人账号下克隆仓库则无法推送修改。如果希望开源项目官方接受你的修改,则可以发起pull request,官方视情况接受。

  • Title: Git简要教程
  • Author: Yizumi Konata
  • Created at : 2020-12-21 14:36:02
  • Updated at : 2024-06-06 23:04:54
  • Link: https://zz12138zz.github.io/2020/12/21/Git/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments