git基础学习

目录

一、Git简介

1、安装Git

2、创建版本库

二、时光机穿梭

1、版本回退

2、工作区和暂存区

3、管理修改

4、撤销修改

5、删除文件

三、远程仓库

1、添加远程库

2、从远程库克隆

四、分支管理

1、创建与合并分支

2、解决冲突

3、分支管理策略

4、Bug分支

5、Feature分支

6、多人协作

7、Rebase

五、标签管理

1、创建标签

2、操作标签

六、自定义Git

1、忽略特殊文件

2、配置别名

3、搭建Git服务器


一、Git简介

1、安装Git

2、创建版本库

二、时光机穿梭

git status可以查看工作区当前的状态,告诉你哪些文件被修改过

git diff可以查看修改内容

1、版本回退

git log可以显示从最近到最远的提交日志,如果嫌输出信息太多,可以加--pretty=oneline的参数

HEAD表示当前版本,HEAD^表示上一个版本,HEAD^^表示上上个版本,往上一百个版本是HEAD~100。

git reset --hard HEAD^ 回退到上一个版本

git reset --hard 1094a(commit id的简写),穿梭到1094a版本

git reflog 记录每一次命令,可以找到所有的commit id

2、工作区和暂存区

.git是Git的版本库,存了很多东西,最重要的是stage(或叫index)的暂存区,还有Git自动创建的第一个分支master,以及指向master的一个指针HEAD。

git add是把文件修改添加到暂存区。

git commit是把暂存区的所有内容提交到当前分支。

3、管理修改

第一次修改->git add ->第二次修改->git add->git commit

理解Git式如何跟踪修改的,每次修改,如果不用git add到暂存区,那就不会加入到commit中。

4、撤销修改

修改还未git add

修改了文件内容,但是还没有git add时,可以使用git restore <filename>或者git checkout -- <filename>撤销修改。

git checkout -- <filename> 意思就是,把filename文件在工作区的修改全部撤销,这里有两种情况。

1.<filename>在修改之后还没有被放到暂存区(还没有git add过),现在,撤销修改就回到和版本库一模一样的状态

2.<filename>已经添加到暂存区后(已经git add过),又做了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让filename回到最近一次git commit或git add时的状态。

修改已经git add,还未commit,修改只是添加到暂存区,还未提交。

可以使用git reset HEAD <filename>git restore --staged readme.txt把暂存区的修改撤销掉,重新放回工作区。

丢弃工作区的修改可以使用git restore <filename>或者git checkout -- <filename>撤销修改。(参考上一小节)

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新版本。

修改已经git add,已经git commit——参考章节二、1、版本回退

5、删除文件

示例1:

新增test.txt-> git add test.txt(添加到版本库)-> git commit -m "add test.txt" -> rm test.txt(从工作区删除) -> git rm test.txt(从版本库删除)-> git commit -m "delete test.txt"

示例2:误删,但是版本库中还有,就可以把误删的文件恢复到最新版本

新增test.txt->git add test.txt(添加到版本库)->rm test.txt(从工作区删除)->git checkout --test.txt(将版本库的恢复到工作区)

git checkout就是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

三、远程仓库

1、添加远程库

git push -u origin master 把本地库的所有内容推送到远程库上。由于远程库是空的,第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时可以简化命令。

2、从远程库克隆

git clone 

四、分支管理

1、创建与合并分支

git branch 查看分支

git branch <name> 创建分支

git checkout <name> 或 git switch <name> 切换分支

git chekcout -b <name> 或 git switch -c <name>  创建+切换分支

git merge <name> 合并某分支到当前分支

git branch -d <name> 删除分支

2、解决冲突

git switch -c feature1 -> git add readme.txt -> git commit -m " " -> git switch master -> git add readme.txt -> git commit -m " " -> git merge feature1 -> 需要手动解决冲突 -> git add readme.txt -> git commit -m "confilct fixed" 

git log --graph --pretty=oneline --abbrev-commit 可以查看分支合并图

3、分支管理策略

方式一、git switch -c dev -> git add readme.txt -> git commit -m "add merge" -> git switch master -> git merge --no-ff -m "merge with no-ff" dev

方式二、git switch -c dev -> git add readme.txt -> git commit -m "add merge" -> git switch master -> git merge dev

方式一可以从分支历史上看出分支信息,如上图黄框所示;方式二不能,如上图蓝框所示。

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支。使用--no-ff方式可以强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

git merge --no-ff -m "merge with no-ff" dev  因为--no-ff合并会创建一个新的commit,所以要加上-m参数,把commit描述写进去。

4、Bug分支

git stash可以把当前工作现场先暂存起来。

两种方式恢复现场:

git stash apply,但是恢复后,statsh内容并不删除,需要用git statsh drop删除。

git stash pop,恢复的同时把stash内容也删了。

可以多次stash, 恢复的时候,先用git stash list查看,然后恢复指定的stash——git stash apply stash@{0}

在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit_id>命令,把bug提交的修改“复制”到当前分支,避免重复劳动。(也就是可以复制某个分支的某个commit修改)

5、Feature分支

开发一个新feature,最好新建一个分支。

如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>进行删除。

6、多人协作

查看远程库信息,使用git remove -v

从本地推送分支,使用git push origin <branch_name>,如果推送失败,说明远程分支比本地更新,需要先用git pull合并,如果合并有冲突,则解决冲突,并在本地提交commit;没有冲突或解决掉冲突后,则解决冲突,并在本地提交。

没有冲突或者解决掉冲突后,再用git push origin <branch_name>推送就能成功。

如果git pull提示no tracking information,说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to branch_name origin/branch_name建立关联。

7、Rebase

git rebase可以把分叉的提交历史整理成一条直线,看上去更直观。缺点是本地的分叉提交已经被修改过了。

五、标签管理

发布一个版本时,通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。Git的标签虽然是版本库的快照,但其实是指向某个commit的指针,所以,创建和删除标签都是瞬间完成的。

1、创建标签

git tag <tagname> <commit id>新建一个标签,默认为HEAD,也可以指定一个commit id

git tag -a <tagname> -m "blablabla..." <commit id>  可以指定标签信息

git tag 查看所有标签。标签不是按时间顺序列出的, 是按字母排序的。

git show <tag name> 可以查看标签信息

2、操作标签

git push origin <tag name> 推送某个标签到远程

git push origin --tags 一次性推送全部尚未推送到远程的本地标签

git tag -d <tag name>  删除本地标签

git tag origin :refs/tags/<tag name>  删除远程标签

六、自定义Git

git config --global color.ui true 让Git显示颜色,让命令输出看起来更醒目。

1、忽略特殊文件

在Git工作区的根目录下创建一个特殊的.gitignore文件,把要忽略的文件名填进去,Git就会自动忽略这些文件。

把指定文件排除在.gitignore规则外的写法就是 !文件名,所以,只需要把例外文件添加到.gitignore即可。

2、配置别名

git config --global alias.**  ****

--global是针对当前用户起作用的,如果不加,只针对当前仓库起作用。

每个仓库的Git配置文件都放在 .git/config文件中。当前用户的Git配置文件放在用户主目录(C:\Users\计算机名字\)下的一个隐藏文件.gitconfig中。别名就在[alias]后面,要删除别名,直接把对应行删掉即可。

$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
$ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

3、搭建Git服务器

 

参考资料:廖雪峰的官方网站——https://www.liaoxuefeng.com/wiki/896043488029600

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值