git应用笔记

安装

  • 阿里云下载Git
  • 选择安装目录时尽量不选在C盘
  • Git组件安装,一般默认即可
  • 选择开始菜单文件夹,默认
  • 选择Git默认编辑器,一般是vim。默认就行
  • 选择默认分支名
  • 选择环境变量,选第二个
  • 选择SSH,默认
  • 选择HTTPS,默认
  • 配置尾行符,默认
  • 配合git bash一起使用,默认
  • git pull行为,默认
  • 凭证管理,选第一个
  • 默认
  • 默认
  • 执行安装。
  • 安装成功后,使用git bash打开git

git command

  • Git练习
  • git commit:提交代码,把原来的代码变更并提交到仓库,基础节点叫做parent。原来的基础节点并不会被删除,类似复制粘贴
  • git branch <分支名>创建分支,用git checkout <分支名>切换到现有分支(*表示当前所在分支)。
  • git merge:把分支合并到主线路
    • 创建分支git branch bugFix
    • 切换分支git checkout bugFix
    • 提交git commit
    • 切换到git checkout main
    • 提交git commit
    • git merge <分支名>把两个分支合并

  • git rebase:不同于git merge 的另外一种合并方法
    • 创建分支git branch bugFix
    • 提交git commit
    • 切换到git checkout main,再提交git commit
    • 切换到git checkout bugFix,rebase到main

git详解

  • 安装:

    • 在debian或者ubuntu下 : sudo apt-get install git
  • 配置

git config --global user.name
git config --global user.email
  • 创建版本库并添加文件到仓库:
# 创建版本库文件夹
 mkdir learngit
 cd learngit
 pwd #显示当前目录
  • 把该文件夹变成可以管理的仓库:
# 会生成一个.git的文件,做版本管理用,git使用的前提是被.git管理起来;用ls-ah 查看该文件
git init
  • 新建一个文本readme.txt,放到learngit下;把一个文件放到git仓库需要以下两步:
# 把文件添加到仓库,这一步是把文件添加到仓库暂存区
git add readme.txt 

# 一次性添加所有已经修改的文件
git add -u

# 一次性添加所有已删除的文件
git add -A

# 添加所有未跟踪的文件
git add .

# 真正把文件提交到仓库
git commit -m "本次提交的说明" 
  • 为什么需要add和commit两步的原因是:commit可以一次性提交很多文件,所以在commit之前可以多次add:
git add file1.txt
git add file2.txt
git add file3.txt
git commit -m "一次性提交上面三个文件"
  • 添加某个文件时,必须先保证文件在当前目录下存在,用ls或者dir命令查看当前目录的文件是否存在或者名称是否正确

  • 比较和追踪文件状态

# 可以查看当前仓库的状态,比如仓库里的文件被修改了,但是还没有被add到仓库暂存区
git status 

# 详细查看某个被修改的文件的不同(和commit的文件相比)
git diff readme.txt 

# 比较完不同之后就可以放心添加到暂存区了,提交修改也是用add,和提交新文件一样
git add readme.txt 

# 在add之后commit之前再看一眼status,会告诉我们将要被提交的文件包括readme.txt(这时还存在暂存区)
git status 

git commit -m "提交readme.txt的修改"

# 在commit之后再看一眼状态,会告诉我们当前没有需要提交的修改,工作目录(working tree)是干净的
git status 
  • 版本回退:
    • 我们之前的每一次commit就相当于是一次“快照”,所以找到之前的提交记录,就可以回退到某一次提交的版本。
# 查看commit的历史记录,会输出所有被记录过的改动,这里会有个HEAD指针
git log 

# 一次提交记录占用一行输出(省略作者和日期那些不重要的信息,只保留SHA计算出来的值)
git log --pretty=oneline 

# git中,HEAD指向的版本就表示当前版本。上一个版本是HEAD^;上上个版本是HEAD^^;往上100个版本是HEAD~100

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

# 使用reset之后,查看状态发现最新的变成了上一次修改的版本了
git status 
  • 如果回退之后,又想恢复。那么只要命令行窗口还没有被关掉,只要向上找到想要恢复那个版本的SHA号。执行如下指令:
# SHA号不用填完,可以填个4或者5位,git会自己去模糊搜索。
git reset --hard <sha> 

# HEAD指向哪个版本,当前版本就是哪个

# 如果SHA已经找不到了,如下方法可以恢复:
# 这条指令记录了使用者对git操作的每条命令,从这个指令的内容中找到已经回退掉的SHA和版本号
git reflog 

# 找到之后就可以恢复了
git reset --hard <sha> 
  • 工作区和暂存区

    • 工作区:就是在电脑磁盘上就能看到的目录
    • 版本库:生成的.git其实就是一个版本库,他不算工作区。
    • git的版本库里面存了很多东西,其中最重要的就是暂存区,称作stage(或者index);git里面为我们自动创建的第一个分支叫做master;指向master的指针叫做HEAD
    • git add就是把文件修改添加到了暂存区
    • git commit就是提交更改,实际上是把暂存区的内容提交到了当前的分支;注意提交的只有暂存区里存在的东西
    • 在只有一个分支的情况,简单理解就是我们把所有的文件全部放到了暂存区,然后一次性提交了暂存区的所有修改
    • 一旦提交(commit)过后,如果你又没有对工作区做任何修改,那么工作区就变得干净
    • commit以后,暂存区的内容就为空了。
  • 撤销:

    • 情况1,如果是在工作区的文件被修改了,但是还没有提交到暂存区,有两种解决方案:
      • a.手动删除掉。
      • b.使用 git checkout -- readme.txt ,可以丢弃工作区的修改
      • 如果暂存区有该文件的上一个版本,则退回到当添加到暂存区时的状态
      • 如果暂存区内没有文件,则退回到上一次commit时的状态
      • 总之,就是让当前文件回到最近一次 git commit或者git add时的状态
      • 注意checkout 后面如果不加 -- file 的话,就变成了切换分支的命令
    • 情况2,工作区的修改已经被提交到暂存区了:
      • git reset HEAD readme.txt :git reset既可以做版本回退,也可以用来把暂存区的东西撤销到工作区,撤销之后暂存区就是干净的了。
      • git checkout -- readme.txt :丢弃工作区的内容
    • 情况3,暂存区的内容已经被提交到仓库了:
      • 本地仓库,用git reset --hard HEAD^退回版本
      • 远程仓库,完蛋
  • 删除:

    • rm test.txt :直接删除工作区的文件,但是如果提交了的话,仓库还有记录
    • git status :直接告诉你工作区哪个文件被删除了
    • 如果正常删除,就先add再commit,把变更同步到仓库
    • 如果删错了,因为版本库还有,所以用: git checkout -- test.txt 恢复。
    • 从这里看出来,git checkout -- file 其实是用版本库里的内容替换掉工作区中的内容,如果版本库没有改文件,那就是丢弃工作区该文件的修改方式了。
  • 远程仓库:

    • git remote add origin <远程仓库SSH地址> :origin是远程仓库的名字,也可以换成其它名字;这一步是在关联远程仓库
    • git push -u origin master :把本地的内容推送到远程,实际上是把当前分支master推到远程库,第一次用 -u,就把本地master和远程master管理,以后就可以不用加-u了。
    • git push origin master
    • git remote rm origin :解除本地和远程仓库的绑定,并没有删除远程仓库的内容
    • git clone <远程仓库SSH地址> :把远程仓库在本地克隆一个一样的
  • 分支管理:

    • 分支管理就是多人协作时,各自在自己的分支上干活,互不干扰
    • 直到开发完毕,一次性合并到原有分支上,高效又安全
    • 如果出现分支合并冲突的时候git就希望我们先手动解决冲突(人工确认更改需求),冲突解决后再合并
#创建分支,然后切换分支
git branch dev
git checkout dev 

#用一句话代替上面两句话,创建并切换分支
git checkout -b dev 

#查看当前分支
git branch 

#把dev分支的改动和当前所在分支合并
git merge dev 

#合并之后,就可以放心删除没有用的dev分支了
git branch -d dev 

# 如果出现分支合并冲突的时候git就希望我们先手动解决冲突,冲突解决后再合并

# 可以查看分支合并图
git log --graph 

git实际项目应用

#添加远程仓
git remote add origin <远程仓库SSH地址>

#从远程主分支拉取代码到本地,只会拉取到本地当前所在分支,并不会为本地建立一个和远程同名分支
git pull origin main

#从终端快速进入目标文件夹
ls      #查看文件目录
cd ./路径名前几字符+TAB键    #TAB键可以联想出完整路径名
cd ..    #退回上一级目录

#正式项目使用上,一般不允许直接把本地修改后的文件推送到Main。这时本地需要新建一个其他分支并切换到该分支,然后把本地代码推到远程该分支下,再手动去远端仓库,点击merge请求,添加审阅人和批准人。审阅和批准完成之后才能由审阅同事点击merge确认。
#远端仓库手动merge完成后,远端仓库将不会出现刚才新建的分支,因为已经被合并。
git add .      #添加所有改动到暂存区
git commit -m ""      #提交更改,实际上把暂存区的内容提交到了当前本地分支
git branch -a         #列举出所有本地和远程的分支名,不加 -a 则表示列举出本地分支名
git checkout -b <分支名>    #新建并切换到当前分支,如果分支已存在,则去掉 -b,直接切到目标分支
git push origin <分支名>    #把本地改动推送到远程分支上

#当本地推送的分支远程不存在时:远程会直接建立一个和本地同名的分支。
#当远程拉下一个本地不存在的分支时:本地会把远程分支的内容存到本地当前所在分支,而不会新建一个分支。
#当远程分支名和本地分支名不同时,拉下远程分支:内容会保存在当前所在本地分支中。

#在本地新建分支:如果某个时间点在当前分支下新建一个分支,那么新的分支会和这个时间点当前分支的代码保持一致。如果在下一个时间点,突然想回到另一个分支,那么里面的代码也会回到该分支下最新的代码。

posted @ 2024-06-14 16:49  你要去码头整点薯条吗  阅读(42)  评论(0)    收藏  举报