Git学习记录(通过看廖雪峰老师的git教程)

pwd 查看目录讲解
git init 建立本地仓库
ls -ah 查看本地仓库
git add ...txt 添加txt文件到仓库 注意文件要放到建立的仓库下
               可一次提交多个文件 和git commit 一起使用
git commit -m "*" 告诉git,把文件提交到仓库 *填写本次提交声明可以输入任何信息
git status 查看结果掌握仓库当前的状态
git diff 名.后缀 查看difference显示的格式是Unix通用的diff格式
git log 显示从最近到最远的提交日志
git log --pretty=oneline 显示最近到最远的提交日志 简单

版本回退
git reset --hard HEAD^  回退到上一个版本 HEAD是当前版本 HEAD^是上一个版本
若要回到最新版本 只要上面的命令行窗口还没关就可找到ID号
git reset --hard 版本id号 前5位即可 git会自动去找
cat 名.后缀 查看文本内容
git reflog 查看命令历史,以便确定要回到未来某个版本
版本库(Repository)
工作区下一个隐藏目录.git
Git的版本库里存放了很多东西,其中最重要的就是称为stage(又叫做index)的暂存区
还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD
stage (index)暂存区
master (HEAD指针)分支
git add 把文件添加进去,实际上就是把文件修改添加到暂存区
git commit 提交更改,实际上就是暂存区的所有内容提交到当前分支

管理修改
Git跟踪并管理的是修改,而非文件
每次修改,如果不用git add将修改放入到暂存区(stage)那么就不会加到git commit提交的内容中去
撤销修改
git checkout -- 名.后缀 可以丢弃工作区中的修改即为使用git add命令
注意 git checkout -- 中"--"很重要,缺少就变成了“切换到另一个分支的命令”
git reset HEAD 名.后缀 将暂存区的修改撤销掉(unsatge),重新放到工作区
已经提交的不合适的修改到版本库时,要想撤销本次修改,用版本回退,前提时没有推送到远程库

删除文件
rm 名.后缀 用于删除一个文件,如果已经提交到版本库,那么就不用担心误删。但是,只能恢复文件到最新版本,会丢失最近一次提交后修改的内容
远程仓库
登录https://github.com 注册一个账号
打开 Git Bash 输入 ssh-keygen -t rsa -C "Email"   回车回车回车 三次 在C盘下出现.ssh目录 里面有id_rsa(私钥)和id-rsa.pub(公钥)
然后登录github 点击SSH and GPG keys 点击NEW SSH key title随意 内容填写公钥里面的内容
远程仓库建立完毕(公共可见的)
添加远程库()
浪费了一下午才连接上去
git remote add origin [email protected]:帐户名:(github上面的仓库名.git)    没括号 origin默认的仓库名字 (我理解为在一个文件夹下运行git init 之后这个本地仓库的名字就是origin)
git push -u origin master 第一次提交 遇见yes 就输入yes回车  实际上是把当前分支master推送到远程
成功后 只要本地做了提交 就可以通过 git push origin master 提交
从远程库克隆
新建一个远程库叫做 gitskills 勾选initilaize this repository with a README
在本地仓库 gitclone [email protected]:duzhenguo/gitskills.git 查看本地仓库发现多了一个文件gitskills这是从gitskills仓库复制来的

分支管理
git checkout -b dev 创建dev分支 -b表示创建并切换相等于 git branch dev和 git checkout dev 两个命令
git branch 查看当前分支
完成工作后切换master分支 git checkout master
切换分支不能显示修改的内容 通过分支的合并才可以显示
git merge dev 合并指定分支dev到当前分支master
git branch -d dev 删除分支dev

解决冲突
先建立分支 git checkout -b feature1
然后修改文件 在提交 git add 文件 git commit -m "修改内容"
切换到master分支 git checkout master
然后修改文件 在提交git add 文件 git commit -m "修改内容"
提交失败 file changed  因为master和feature1修改冲突 git无法“快速合并” 智能试图把各自的修改合并起来
git merge feature1 将feature1分支合并到master分支 冲突
git status 也可以查看冲突
cat 文件 看到 <<<<<<<,=======,>>>>>>>标记出不同分支的内容
修改文件的内容为最后想合并后的结果
在添加 提交 然后删除分支feature1 在查看没有冲突

分支管理策略
通常,合并分支时,git会用Fash forward模式,在这种模式下,删除分支后,会丢掉分支信息。
如果强制禁用Fash forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息
禁用Fash forward   --no-ff
如果才用 ff 模式的,则直接把 master 的指针直接指向了 dev 分支的最新提交,这样两个分支的最新提交的 commit id 就是一样的。
git merge --no-ff -m "描述新增的commit" dev 合并dev 并创建一个新的commit “提示”
Bug分支
git stash 把当前的工作保存起来,等BUG修复后在继续工作
git stash apply恢复后,stash内容并不删除,需要用git stash drop来删除
git stash pop 恢复的同时把stash内容也删了

Feature分支
添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
添加分支 git checkout -b feature-vulcan
删除分支 git branch -d feature-vulcan  提示分支未合并是否强制删除,如果删除将丢失修改
强行删除 git branch -D feature-vulcan 删除成功

多人协作
查看远程库的信息 git remote 或者 git remote -v
推送分支 git push origin master / git push origin 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,如果有冲突,要先处理冲突。

Rebase
git log --graph --pretty=oneline  --abbrev-commit 查看分支
git rebase 合并历史分叉到一条直线
rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比

标签管理 就是增加一个标识 例如IP对应域名 便于理解就是版本号
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。
Git有commit,为什么还要引入tag?
“请把上周一的那个版本打包发布,commit号是6a5819e...”
“一串乱七八糟的数字不好找!”
如果换一个办法:
“请把上周一的那个版本打包发布,版本号是v1.2”
“好的,按照tag v1.2查找commit就行!”
所以,tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。

创建标签
git branch 查看分支
git tag v1.0 创建一个v1.0标签 默认标签是提交到commit上的 标签默认为HEAD
git tag 查看标签
如果忘记打标签 可以通过历史提交的commit id
 
git log --pretty=oneline --abbrev-commit 查看ID
git tag v1.2 ID号
标签不是按时间顺序列出,而是按字母排序的 用git show <tagname> 查看
git tag -a v1.0 -m "version 0.1 released" id号 创建带又说明的标签
标签总是和commit 挂钩的,如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签

操作标签
git tag -d v0.1 删除v0.1标签
git push origin v1.0 推送标签到远程
git push origin --tags 一次性全部推送远程的本地标签
如果标签已经推送到远程,要删除远程标签就需要先从本地删除,然后在从远程删除,删除命令也是push
git tag -d v1.0
git push origin :refs/tags/v1.0

使用GitHub
点击他人的仓库 点击Fork 即可复制他的仓库到自己的仓库下
通过pull request给他的仓库贡献代码

只用码云
地址 https://gitee.com/
自定义Git
git config --global color.ui true 定义颜色 source code pro
忽略特殊文件
在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
忽略文件的原则是:
忽略操作系统自动生成的文件,比如缩略图等;
忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
有些时候,你想添加一个文件到Git,但发现添加不了,原因是这个文件被.gitignore忽略了
git add -f 文件  -f 强制添加
git check-ignore   命令检查

这个挺有意思
配置别名
--global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用。
git config --global alias.st status 用别名st 代替status
把lg配置成了:  这个比较好用 哈哈
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"
配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
cat .git/config 每个仓库的Git配置文件都放在.git/config文件中
配置别名也可以直接修改这个文件,如果改错了,可以删掉文件重新通过命令配置。
搭建Git服务器 文中说的是Linux系统 我的不是就没看......

我的GitHub账号:duzhenguo
我的码云账号:[email protected]   虽然还没有一点贡献,先写上,说不准以后就有了哈哈


本文的内容来自
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

廖雪峰老师
有兴趣的可以去看看,下面的评论也挺有意思










猜你喜欢

转载自blog.csdn.net/qq_38441377/article/details/80550267
今日推荐