git初解

分布式版本控制

集中式(SVN)需要从服务器获取完整版本,修改后还要提交给服务器。服务器崩溃,以前的历史信息会丢失,分布式本地有保存则不会丢失。
分布式每个用户都有完整版本,可以在本地保存修改,服务器只是交换用户的修改数据。(低版本Linux的可能不是git,还没改名考虑git-core)

配置全局用户

–global 所有的Git仓库都会使用这个配置

git config --global user.name "your name"
git config --global user.email "test@email.com"

创建版本库

版本库又称仓库,相当于目录,里面存放的文件被git管理,会记录修改的文件信息(修改人,修改时间,修改说明)。

创建目录
目录变仓库

git init

生成.git目录存放版本修改信息,不要手动修改,只记录纯文本的修改信息。文本使用utf-8编码。
要放到git仓库的文件必须在仓库下。

上传文件

先添加文件,可以多次add

git add 文件

提交文件

git commit -m "陈述修改信息"

查看仓库的当前状态

git status

在这里插入图片描述
查看文件的不同,可以查看修改的内容

git diff

在这里插入图片描述
add后的status,会变成change commit
在这里插入图片描述

快照(commit)

快照即提交的存档

查看记录存档

参数–pretty=oneline会将多条记录以一行一行的显示,只能查看当前版本之前的提交历史

git log

在这里插入图片描述
6a208c5c…的commit id,根据SHA1生成。
HEAD指向当前版本,HEAD^指向上一个版本,HEAD~100指向上100个版本

查看历史命令

可以查看未来的提交,即从未来版本回退到当前版本时,log是无法查看的

git reflog

版本穿梭

切换commit的版本,commit_id可以log或relog查看

git reset --hard commit_id

暂存区

add命名会把文件从工作区(git目录)存到暂存区,暂存区的文件通过commit命令提交给分支。HEAD指向分支。
git记录的是文件的修改,不add到暂存区的文件在commit时不会提交到分支。

撤销工作区的文件修改

git checkout -- 文件

撤销暂存区的文件修改,即在工作区add后撤销,然后可以再撤销工作区的文件修改(上一条命令)

git reset HEAD 文件

commit后要撤销参考版本穿梭

删除文件

工作区的文件删除,还要删除版本库中的文件,先git rm后还要git commit

git rm 文件

工作区的文件被误删时,可以通过版本库中文件还原修改或删除工作区的版本。

git checkout -- 文件

远程操作

配置ssh

ssh-keygen -t rsa -C "test@email.com"

输入命令后一路回车,在用户目录下会自动生成公钥和私钥,对应.ssh隐藏目录下id_rsa和id_rsa.pub
在github的账号ssh设置中,添加公钥
查看公钥
在这里插入图片描述

本地库与远程库关联

git remote add origin git@github.com:username/repository.git

本地库的master分支推送到远程库,首次推送需要加参数-u

git push -u origin master

从远程克隆

git clone git@github.com:用户名/仓库名.git

分支

git的分支是以时间线为基础的,HEAD指向master分支,分支指向当前文件版本。创建并使用新分支时,HEAD会指向新分支。但是并不会影响master分支的使用,可以将新分支与master分支合并,master直接指向新分支的版本。合并后可以删除新分支,就只剩master分支了。

具体理解见

https://www.liaoxuefeng.com/wiki/896043488029600/900003767775424

查看分支

git branch

创建分支

git branch branch_name

切换分支

git switch branch_name

创建并切换分支,两种都可以

git switch -c branch_name
git checkout -b branch_name

合并某分支到当前分支

git merge branch_name

删除分支

git branch -d branch_name

分支合并冲突

两个分支对同一个文件做了修改并提交时,不能直接合并两个分支,会发生冲突需要手动解决文件冲突再提交
<<<<<<<,=======,>>>>>>>标记出不同分支的内容
查看分支合并图

git log --graph

禁用Fast forward,会合并记录分支信息(???)

git merge --no-ff -m "merge with no-ff" dev

查看分支历史,–abbrev-commit 减少数据头部显示(commit_id)

git log --graph --pretty=oneline --abbrev-commit

一般不开发中不使用master分支,使用其他分支,在合并到master

bug分支

保存当前分支工作现场

当临时需要处理bug时,需要保存当前分支,再切换到master分支,创建一个修复bug的分支,在合并到master分支。

git stash

查看保存的工作现场

git stash list

恢复工作现场,先切换到工作分支

git stash apply #恢复,不会删除stash list记录
git stash pop #恢复同时删除stash

多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash

git stash apply stash@{0}

dev分支是从前面的master分支复制出来的,dev分支也存在bug不要重复提交和合并,直接在dev分支通过在master的提交就能更新。

git cherry-pick commit_id

Feature分支

在添加新功能时,创建feature分支,这个分支没有被合并时不能删除,强制删除-D,删除-d

git branch -D 分支名

多人协作

查看远程可以上传和下载的地址

git remote -v

在这里插入图片描述
推送分支到github,一般推送master和dev分支

git push origin 分支名

clone时默认只能看到master,需要关联dev,创建远程origin的dev分支到本地

git checkout -b dev origin/dev 

两个人先后对同一个分支进行修改,后面提交的会引起冲突,git pull分支解决冲突后重新push
注意指定本地dev分支与远程origin/dev分支的链接,没链接可能会报错

git branch --set-upstream-to=origin/dev dev

查看远程库信息,使用git remote -v
本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

log变直线

git rebase

标签

可以根据commit_id给文件打版本标签
用于新建一个标签,默认为HEAD,也可以指定一个commit id

git tag tagname [commit_id]

可以指定标签信息

git tag -a tagname -m "添加描述" [commit_id]

查看所有标签

git tag

删除本地标签

 git tag -d v1.0

推送全部标签到远程

git push origin --tags

远程标签删除需要先删除本地,在删除远程

git push origin :refs/tags/v1.0

删除github远程库

git remote rm origin

指定远程库的名字,就可以直接使用远程库名代替默认的origin

git remote add 远程库名 git@gitee.com:liaoxuefeng/learngit.git

忽略特殊文件

.gitignore中可以设置设置忽略哪些特殊文件,!.gitignore表示不排除
强制跳过.gitignore

git add -f

找到上传文件的规则

git check-ignore -v a.class

给命令起别名

git config --global alias.unstage 'reset HEAD'

也可以在配置文件中配置alias选项

bash要求github登录

出现要求github登录,需要通过以下命名将远程连接更改为ssh方式

git remote set-url test git@github.com:用户名/远程仓库名.git

出现unrelated history错误

两个独立仓库提交到统一远程仓库出现的错误
在这里插入图片描述
使用以下命令时加参数–allow-unrelated-histories,可以合并两个独立启动仓库的历史

git pull test master --allow-unrelated-histories

删除github上的目录

先进到本地要删除的文件夹下

git rm -r --cached directory #删除
git commit -m 'modify: Delete directory' #提交备注
git push -u origin master #push上去才完事儿,要注意
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值