Git使用教程

什么是git

git是一个分布式版本控制系统,能够跟踪文本文件的改动,结合对应的命令实现代码版本的控制。

如何创建git环境(linux和Windows都适用)

  • 首先,选择一个合适的地方,创建一个空目录(如GitTest目录)
  • 第二步,通过git init命令把这个目录变成Git可以管理的仓库:git init
  • 第三步,创建任意一个文件在GitTest目录下(如readme.txt文件,建议使用VS Code创建)
  • 第四步,把readme.txt文件放到git仓库。
    • 用命令git add告诉Git,把文件添加到仓库:git add readme.txt
    • 用命令git commit告诉Git,把文件提交到仓库:git commit -m “wrote a readme file”。此处"-m"后面输入的是本次提交的说明,建议尽量书写有解释意义的说明。
      (ps:为什么add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件)

git功能

在这里插入图片描述workspace:工作区
staging area:暂存区/缓存区
local repository:版本库或本地仓库
remote repository:远程仓库

版本回退

每次修改了readme.txt,以上的add,commit可以再次使用,不断对文件进行修改,然后不断提交修改到版本库里。我们可以通过git log查看这些修改记录:git log或者 git log --pretty=oneline(后面这个更加简洁)。

$ git log --pretty=oneline
fd2f59e1e0214010c61377b6ae7a4c7253ce405e (HEAD -> master) rewrite readme txt
377b61e7b4c6c880acc365d9472d95e6e1225a0 wrote a readme file

你看到的一大串类似fd2f59e1…是commit id(版本号),是一个SHA1计算出来的一个非常大的数字,用16进制表示。HEAD表示当前的版本。

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交fd2f59e…(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。同时也可以用commit id.版本号没必要写全,前几位就可以了,Git会自动去找。 如果忘记commit id,可以使用要用git reflog查看命令历史,以便确定要回到未来的哪个版本。

  • git reset --hard HEAD^
  • git reset --hard fd2f59e(fd2f59e 是commit id的一部分)

工作区和暂存区

工作区就是我们电脑上可见的目录,如GitTest目录。工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支

撤销修改

  1. 丢弃工作区的修改,readme.txt文件在工作区的修改全部撤销:git checkout – readme.txt
    这里有两种情况:
  • 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  • 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
    总之,就是让这个文件回到最近一次git commit或git add时的状态。
  1. 用命令git reset HEAD 可以把暂存区的修改撤销掉(unstage),重新放回工作区

删除文件

git rm readme.txt 相当于是删除工作目录中的readme.txt文件,并把此次删除操作提交到了暂存区。(新版本:git restore --staged ?)
git checkout – readme.txt相当于是让工作目录readme.txt恢复到暂存区中readme.txt的状态

远程操作

  • 创建关联仓库:git remote add origin git@github.com:michaelliao/learngit.git
  • git push 把本地库的所有内容上传远程代码并合并:git push -u origin master(-u:第一次推送不会产生新的master分支,并把本地的master分支和远程master分支关联,后面第二次使用应该去除)。
  • git remote 远程仓库操作
  • git fetch 从远程获取代码库
  • git pull 下载远程代码并合并
  • git remote rm origin 删除远程库,其实是解除本地和远程的绑定关系
  • git clone git@github.com:michaelliao/gitskills.git 从远程克隆到本地

分支管理

使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

创建与合并分支
  • 列出分支基本命令:git branch
  • 创建分支命令:git branch (branchname)
  • 切换分支命令:git checkout (branchname)或者git switch (branchname)
  • 创建+切换分支:git checkout -b 或者git switch -c
  • 合并分支命令:git merge (branchname)。(合并指定分支到当前分支)
  • 删除分支:git branch -d (branchname)
解决冲突

当创建的新分支和后续master上继续改进后的版本有冲突
在这里插入图片描述
文件存在冲突,必须手动解决冲突后再提交。git status也可以告诉我们冲突的文件,定位到冲突的地方后改好然后再提交,合并完成

  • git log --graph命令可以看到分支合并图:git log --graph --pretty=oneline --abbrev-commit

分支管理

  • git merge --no-ff -m “merge with no-ff” dev:合并dev分支,请注意–no-ff参数,表示禁用Fast forward。因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
  • 如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。

bug修复

  • 1、 git stash:把当前工作现场“储藏”起来,等以后恢复现场后继续工作
  • 2、git checkout master
  • 3、git checkout -b (bugname)创建bug分支,进行add和commit提交修复后版本
  • 4、git switch master:切换到master分支
  • 5、git merge --no-ff -m “merged bug fix” (bugname)
  • 6、git switch (branchname):此时工作区是干净的
  • 7、git stash list:命令查看
  • 8、两种方案恢复工作区:①git stash apply恢复但不删除,git stash drop来删除。②git stash pop恢复的同时把stash内容也删了:

多人协作

  • 首先,可以试图用git push origin 推送自己的修改;
  • 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  • 如果合并有冲突,则解决冲突,并在本地提交;
  • 没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!
  • 如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/。

查看远程库信息,使用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,如果有冲突,要先处理冲突。

重整分支

  • git rebase:rebase操作可以把本地未push的分叉提交历史整理成直线

标签管理

  • git tag :给当前分支打一个新标签。
  • git tag :对add merge这次提交打标签
  • git tag: 查看所有标签
  • git show : 查看指定标签信息。还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:
    • $ git tag -a v0.1 -m “version 0.1 released” 1094adb
  • 命令git push origin 可以推送一个本地标签;
  • 命令git push origin --tags可以推送全部未推送过的本地标签;
  • 命令git tag -d 可以删除一个本地标签;
  • 命令git push origin :refs/tags/可以删除一个远程标签。

一些其他命令

  • git status 查看工作区的状态
  • git diff HEAD – readme.txt 查看工作区和版本库里面最新版本的区别

参考链接

https://www.liaoxuefeng.com/wiki/896043488029600
https://www.runoob.com/git/git-basic-operations.html
https://devpress.csdn.net/cloud-native/64fab29787b26b6585a1f402.html?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6Mjg4OTIzOSwiZXhwIjoxNjk4Mzc0OTk0LCJpYXQiOjE2OTc3NzAxOTQsInVzZXJuYW1lIjoicXFfNDA5MTAxOTEifQ.vj-_dLU_8nCQNSEDYS2owL3jR0MwPSz1tzDgW5trnJE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值