Git简要教程

基本概念
工作区:电脑里能看到的目录称为工作区
版本库:工作区中的一个隐藏的.git
目录
暂存区:在版本库中,git add
将文件提交到的位置
HEAD
指针:指向当前分支当前版本的指针
分支:最开始git会为我们创建一个master分支,提交在master分支上的版本在一条时间线上,而创建新的分支相当于另外开辟一条线,在新开辟的线上提交,原来的线是不会发生变化的。必要时可以将分支与分支合并。
合并:将一个分支合并到另一个分支上称为合并。合并有两种模式,以将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=oneline
,git 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
撤回到最近一次的commit
或 add
的状态
注意
--
回退暂存区的修改: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
相当于向origin
的RemoteBranch
分支推送。
将远程库某分支拉取并于本地某分支合并: 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账号,然后按以下步骤操作
- 若在用户主目录下没有.ssh文件夹或文件夹中没有有id_rsa和id_rsa.pub这两个文件,则在Windows下先在用户主目录下打开GitBash(不知道在别的地方打开行不行,Mac下直接打开Shell就行了),输入
ssh-keygen -t rsa -C "EMAIL@email.com"
,然后一路回车以获得.ssh文件夹以及两个文件 - 登录github,点击右上角用户头像右侧的下拉菜单,点击Settings,然后点击左侧列表的SSH and GPG keys,然后点击右侧绿色按钮New SSH key,填上任意Title,在Key文本框内粘贴用户主目录下.ssh文件夹中id_rsa.pub文件中的内容。
- 点击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.