git的基本使用

什么是git?
是分布式版本控制系统

命令

  • git init
    是初始化
  • pwd
    查看当前目录位置
  • ls -lA|less
    查看本地库隐藏文件(.开头的是不可见的)
  • 设置项目级别的签名
    git config user.name zhoulu
    git config user.email [email protected]
  • 设置系统用户级别的签名
    git config --global user.name zhoulu
    git config --global user.email [email protected]

git status
查看工作区 暂存区状态
esc然后按 :最后wq 保存 回车
w保存 q退出 q!强制退

vim good.txt
在当前目录创建一个good.txt
cat food.txt
查看这个文件
git add good.txt
将这个txt文件添加到暂存区。
git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。
git rm --cached good.txt
将这个txt文件从暂存区中移除
git commit good.txt
git commit -m "修改信息"
从暂存区提交到本地库文件
:set nu
在跳出的窗口(vim编辑器)中显示行号

只要创建或者修改文件都要执行 git add and git commit -m "".最好每步都查看下git status.

每次修改或者创建文件都能通过 git log来查看 git commt -m "修改信息"中的信息。
版本的前进和后退
git log
看最近三次的记录
查看版本的历史记录 能看提交过的good1.txt的历史
记录放不下 按空格 翻下一页

git log --pretty=oneline
就i是这个记录太多了 以一个漂亮的形式展示 就是一行

git reflog
能看指针 好前进后退
指针指向最近的那个版本

现在我们启动时光穿梭机,准备把text.txt回退到上一个版本,也就是上一次修改的那个版本,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。
1.基于索引值的操作
使用git reset --hard 哈希值 能前进后退
2.使用^
使用git reset --hard HEAD^ (有多少个^就退几行) 只能往前
tail -n 3 good1.txt
只看good1这个文件的后三行
3.使用~
使用 git reset --hard ~3 后退三步
使用cat text.txt来查看当前文件内容信息。

穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

修改good.txt
vim good.txt->修改
通过 git status 查看这个文件被修改了
如果能看看具体修改了什么内容,自然是很好的。比如你休假两周从国外回来,第一天上班时,已经记不清上次怎么修改的readme.txt,所以,需要用git diff这个命令看看
git add good1.txt
git commit -m " 注释" good1.txt 这是不用打开vim编辑器

ctrl + L 快速清屏
mkdir 文件名 创建一个文件
cd../ 上一级
cd 文件名/进去这个文件

git help reset 打开文档
reset命令的三个参数
1.--soft
仅在本地库中移动head指针
2.--mixed
在本地库移动head指针 && 重置暂存区
3.--haed
在本地库移动head指针 && 重置暂存区 && 重置工作区

删除提交到本地库中的文件
使用rm a.txt 就删除了
删除后要将删除这条记录提交
git add a.txt
git commit -m "注释" a.txt

当apple.txt进行修改后 能通过
git diff apple.txt 来查看不同
--git diff 文件名:是将工作区中的文件和暂存区进行比较
git diff HEAD^ apple.txt
--git diff 本地库中的历史版本 文件名 :是将工作区中的文件和本地库历史记录进行比较
git diff
--直接不带文件名 就将所有的都列出来

分支管理
git branch -v
查看所有分支
git branch hot_fix
创建一个分支 hot_fix
git switch hot_fix
转向这个分支
git marge hot_fix
谁要合并分子首先要先转到这个分支上 然后再使用marge 要被合并的文件名

去github创建一个远程库 然后复制地址https://github.com/12lulu6/a.git 但是记不住、
git提供了git remote -v 名字 https://github.com/12lulu6/a.git
以后使用git remote -v就能访问了

使用远程库
1.注册github
2.在相应文件中打开windowsshell.
由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,创建SSH Key.
ssh-keygen -t rsa -C "[email protected]"
然后一路回车,使用默认值即可
3.然后在C:\Users\周鹿.ssh中的.pda用游览器打开复制,去github中的setting下ssh key中创建一个key。
4.再github创建一个learngit库
5.在本地的learngit仓库下运行命令:
git remote add origin [email protected]:github账户名/learngit.git
git remote add origin [email protected]:12lulu6/NetEase-Cloud.git
添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。
6.将本地库的内容推到远程库上 将master分支的内容推到远程库
$ git push -u origin master
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
为什么要添加到远程库?
因为因为一个项目有多个人,只有一台机器是有元素版本库,当你传到远程库中,别人就能拉取下来。
其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。

7.删除远程库
先使用下面这个查看远程库信息
git remote rm origin
此处的“删除”其实是解除了本地和远程的绑定关系,并不是物理上删除了远程库。远程库本身并没有任何改动。要真正删除远程库,需要登录到GitHub,在后台页面找到删除按钮再删除。

7.克隆远程库
7.1首先我们模拟要有一个远程库,创建gitskill库
7.2在要克隆远程库的本地库下执行,就将这个远程库下载到本地库中
git clone git@github.com:12lulu6/gitskill.git 但是你克隆下来的这个只有master分支,你需要在其他分支dev的开发的话,要创建远程origin的dev到本地 git checkout -b dev origin/dev

8.查看远程库消息
$ git remote
git remote -v显示更详细的信息

分支
什么是分支?
分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN。
如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了Git又学会了SVN!

git branch dev 创建
git switch -c dev(推荐) 切换到这个分支

git merge dev
使用该命令会使用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
使用--no-ff方式来合并,合并的同时创建一个commit,能通过git log来查看合并
$ git merge --no-ff -m "合并描述" 分支

$ git branch -d dev 删除dev分支
如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。

创建分支的好处,就是你创建了一个分支,在上面操作,不影响master分支,比如说在dev分支你修改了readme.txt分支,切换到master分支来看,readme.txt是不会变的。但是你在master分支合并了dev分支后,再在master分支查看readme就是修改后的样子。
如果你在dev分支修改了readme
(Creating a new branch is quick AND simple.),
再在master修改了readme
(Creating a new branch is quick & simple.),
这时候在master合并,就会产生文件冲突。
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用git log --graph命令可以看到分支合并图。

考虑没有冲突情况的合并,当合并完成之后,master分支改变为合并之后的样子,但是此时的feature分支依然保持自身的样子,并没有因为合并而产生变化。
同理,在存在冲突的情况下,合并之后feature分支也依然保持原来的状态没有改变。
一句话总结,合并操作( merge )只对对当前所在分支产生影响;无论是否存在冲突,合并之后,feature分支都不会发生变化。

关于处理bug的情况
1.可以创建一个新分支来处理bug,恢复后删除分支
2.当这个分支的工作还没有完成,但是你现在必须去处理bug,可以保存现场->处理bug->恢复现场
2.1.Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
git stash 保存现场 去该去的分支处理bug,使用1的方法处理bug 2.2.刚才的工作现场存到哪去了?用git stash list命令看看: git stash list
3.2恢复现场
--git stash apply恢复,但是恢复后,stash内容并不删除,你需要用
git stash drop来删除;
--git stash pop,恢复的同时把stash内容也删了

将本地库和远程库连接
1.在github中创建远程库
2.在本地目录下git bash   执行git remote add origin [email protected]:12lulu6/supermall1.git
  问题:
  2.1.error: remote origin already exists.
  解决:
  git remote rm otigin 删除远程库origin
  git remote -v 查看
  git remote add origin [email protected]:12lulu6/supermall1.git

  2.2error: failed to push some refs to 'github.com:12lulu6/supermal
  解决:$ git pull --rebase origin main

3.git push -u origin main 将本地库的main推上去

你可能感兴趣的:(git的基本使用)