Git常用命令学习

Git配置

  • git config --global user.name “yourname”
  • git config --global user.email “emailaddress”
  • 其中–global参数为此设置对该电脑的所有仓库都起作用,也可以为不同的仓库设置不同的用户名和地址。

Git建立仓库

  • 在想要建立的目录下(可用cd切换目录),直接用git init 命令即可,该目录下会多出一个.git目录(默认为隐藏文件),此文件用来Git跟踪管理版本库的。
  • 该目录默认隐藏,使用ls -ah即可看到
  • 所有的版本控制系统都只能跟踪文本文件的变化,图片视屏等二进制文件也能由版本控制系统管理,但是不能跟踪器具体变化。

Git添加文件

  • git add readme.txt 将readme.txt加入到仓库中
  • git commit -m “本次提交说明” 将文件提交到仓库
    :git add 命令可以一次性添加多个文件。git commit命令可以将添加的文件一次性提交

查看Git工作区状态

  • 使用git -status可以查看当前工作区状态,在被修改文件被add之前查看,会提示已修改的文件还未准备提交,即还未被git add。在git add之后查看,会提示有changes需要被commit
  • 若使用git -status发现文件被修改,则可使用git -diff查看具体的修改(若某行被修改,则在git中显示为先将该行删除,然后又增加了修改之后的行)

Git版本回退

查看commit版本

  • 在Git中HEAD表示当前版本,上一个版本表示为HEAD^ ,上上一个版本为HEAD^^,以此类推,还有一种表示版本的方式就是commit id
  • git log 显示commit的历史,显示每次commit的commit_id(版本号),author,时间,commit信息,若超过一页则会进入vim模式,按q即可退出。
  • git log --pretty=oneline 只显示重要信息(commit_id和commit信息)

版本回退

  • git reset --hard commit id(回退倒commit_id版本)(该命令中的commit id没必要写完整,可以只写前几位,能让git区分出版本即可。commit id可通过git reflog查询历史命令来寻找需要的commit id)
  • git reset --hard HEAD^ 表示回退到上一版本,同理git reset --hard HEAD^^ 表示向前回退两个版本
    Git版本回退非常快,因为其内部有个指向当前版本的指针HEAD,当回退到前一版本时,Git只是将HEAD指向了前一版本。入下图所示
    回退前:
    在这里插入图片描述
    回退后:
    在这里插入图片描述

工作区(working directory)、暂存区(stage)、分支和HEAD

在这里插入图片描述

  • 工作区就是你设置为仓库的文件夹,工作区的隐藏目录.git不算是工作区,而是Git的版本库。Git的版本库里含有暂存区和分支。
  • git add会把文件修改添加到暂存区中,git commit会把暂存区中的所有内容提交到当前分支。
  • git diff显示的是工作区文件与暂存区文件的区别(上次git add的内容),git diff --cached显示的是暂存区文件与仓库分支文件的区别(上次git commit后的内容
  • 如果对工作区文件的修改没有git add到暂存区(比如在将第一次修改git add之后,又对文件进行了修改),则此时git commit只会将第一次的修改提交到当前分支上。使用git diff HEAD – filename可以查看此时分支上的文件和工作区文件的区别。

撤销修改

  • git checkout – filename 丢弃工作区的修改,即未git add的修改将被会被丢弃。
  • 若已经git add了,则先使用git reset HEAD filename(这个命令将会把暂存区的修改撤销掉,重新放回工作区),再使用git checkout – filename 即可将修改彻底撤销掉。
  • 若已经commit了,则使用版本回退可以恢复到修改之前。前提是未推送到远程库。

删除文件

  • 使用 rm filename命令删除filename(和直接在可视化窗口中删除filename是相同的)
  • 若误删,则可使用 git checkout – filename恢复(git checkout其实是用版本库里的版本替换工作区的版本,所以删除这种“修改”也能被撤销掉)
  • 若确定要删除,则使用git rm filename删掉(此时相当于rm filename,并且git add filename),然后使用git commit即可
  • 删除是一种“修改”,修改如何撤销可以参看撤销修改

Git远程仓库

创建ssh key

两种从远程库clone项目到本地的方法

  • 使用https和ssh
  • https和ssh的区别:
    • 1、前者可以随意克隆github上的项目,而不管是谁的;而后者则是你必须是你要克隆的项目的拥有者或管理员,且需要先添加 SSH key ,否则无法克隆。
    • 2、https url 在push的时候是需要验证用户名和密码的;而 SSH 在push的时候,是不需要输入用户名的,如果配置SSH key的时候设置了密码,则需要输入密码的,否则直接是不需要输入密码的。

github上添加SSh key

  • 1.首先查看主目录下有没有.ssh目录(cd ~),且该目录下是否含有id_rsa和id_rsa.pub这两个文件,若含有则进入第3步,否则继续第2步。
  • 2.使用命令ssh-keygen -t rsa -C "your_email@example.com",创建一个SSh key,此过程中会提示你输入两次密码,此密码是你要push时需要输入的密码,若直接回车则push时不需要密码。
    • 参数含义
    • -t 指定密钥类型,默认是 rsa ,可以省略。
    • -C 设置注释文字,比如邮箱。
    • -f 指定密钥文件存储文件名(上述命令省略了-f参数)
  • 3.在github上添加SSh key,登录github之后在Setting中的SSH and GPG keys中添加即可。注意:需要添加的是id_rsa.pub文件中的内容。id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥
    在这里插入图片描述
  • 4.测试该SSH,使用命令ssh -T git@github.com,若你创建SSH key时输入了密码,此时会要求你输入密码,否则会直接显示连接成功,会提示你不能使用ssh访问,需要你用https去访问,如下图:
    在这里插入图片描述

本地库与远程库关联

  • 首先登陆github建立一个仓库,如下图:
    在这里插入图片描述
  • 根据提示使用命令将本地仓库与远程库关联起来,有两种方式:
    • git remote add origin repository-address.git
    • git remote add origin git@server-name:path/repository-name.git如下图:
      在这里插入图片描述

push和clone

  • 使用git push -u origin master命令即可将本地库的所有内容推送到远程库上,使用git push实际上是把当前分支master推送到远程。由于远程库是空的,我们第一次推送master分支时,加上了-u参数。Git不仅将内容推送到远程库,并且将本地的master分支和远程的master分支关联起来了,以后推送或拉取时就可以简化命令。
  • 之后只要在本地commit了,就可以通过命令git push origin master将本地master分支的最新修改推送至GitHub
  • 从远程库复制内容到本地仓库使用git clone 远程库地址.git 即可复制到本地仓库,其中远程库地址j和上面关联时的地址一样,既可以使用https,也可以使用ssh。
    在这里插入图片描述

Git分支

分支介绍

  • HEAD指向当前分支,所有的提交都在当前分支上进行。目前为止,我们只有一个Git默认的主分支master,所以HEAD指向master,master指向最新的提交。如下图:
    在这里插入图片描述
  • 每次提交,master都会向前移动一步,随着提交次数增多,master分支线不断变长。
  • 当我们创建一个新分支dev的时候,Git会创建一个指针dev指向与master相同的提交,然后将HEAD指向dev,就表示当前分支为dev,如下图:
    在这里插入图片描述
  • 之后对工作区的修改和提交都是针对dev分支的,每提交一次dev分支向前移动一步,而master分支不变:
    在这里插入图片描述
  • 若是要合并master和dev,最简单的方式就是将master指向dev:
    在这里插入图片描述
  • 然后可以删除dev分支:
    在这里插入图片描述

Git分支的基本命令

  • git branch 查看分支
  • git branch name 创建名字为name的分支
  • git checkout name 切换到name分支
  • git checkout -b name 创建并且换分支
  • git merge name 将当前分支合并到合并到name分支(将当前分支指针指向name分支)
  • git branch -d name删除name分支
  • 查看commit历史:git log --pretty=oneline --abbrev-commit
  • :Git鼓励使用分支完成工作后再合并。

解决冲突

  • 当在不同的分支上对文件做了不同的修改时,比如在feature1分支上做了修改,又切换到master分支修改了相同的文件,那么状态会如下图所示:
    在这里插入图片描述
  • 此时合并将会出现冲突,必须解决冲突之后(将两个分支上的修改的矛盾的地方统一)再合并。
  • 使用git log --graph命令可以看到分支合并图

分支管理策略

  • 使用git merge --no-ff -m “write something” 分支 命令表示禁用Fast forward。不使用Fast forward模式,使用git log 就可以看到曾经合并过,使用Fast forward不能看出曾经做过合并。
  • Fast forward是直接将master分支指向dev分支的最新一次提交,所以两者的commit_id是相同的,而禁用Fast forward之后,master会重新commit一次,文件内容与dev最新提交的文件内容相同。此时master最新的commit_id和dev最新的commit_id不同,所以能看出两者合并过。
  • Git在团队开发中的使用策略:应该将master作为版本发布的分支,平时在其上面不能进行修改,只能在版本发布的时候再把dev合并到master上。每个成员都有自己的分支,在自己的分支上工作完之后,时不时将自己分支上的工作汇总到dev分支上。

Bug分支

  • 当正在进行的任务未完成,而要处理其他任务时(比如处理一个bug)使用git stash命令可以将当前工作现场储藏起来,然后新建一个分支去处理该任务,当任务完成后可以恢复现场后继续工作。git stash 的作用就是在修复bug之后进行commit操作,并不会将之前没完成的任务同时给commit。
  • 使用git stash list可以查看保存的工作现场
  • 使用git stash apply恢复现场后,stash内容不删除,使用git stash drop来删除
  • 使用git stash pop恢复现场,同时会直接删除掉stash内容
  • 恢复指定的stash可用命令 git stash apply stash@{num}

强制删除未合并的分支

  • git branch -D branch-name

多人协作

查看远程库

+ git remote
+ git remote -v  会显示可以抓取和推送的origin地址

推送分支

  • git push origin branch-name :推送branch-name分支
    • 比如git push origin master
    • git push origin dev(若远程库无dev分支,则会自动创建dev分支)
  • master分支是主分支,所以时刻要和远程库同步
  • dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步
  • bug分支只用于在本地修复bug,就没必要推到远程了
  • feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

抓取分支

  • 其他开发人员默认只能看到master分支,使用git checkout -b dev origin/dev命令来创建远程dev分支的本地分支
  • 开发流程一般如下:
    • 提交你的工作:git push origin branch-name
    • 若其他开发者已经对该文件做了修改,会提示你不能push,这时要先pull尝试合并:git pull
    • 若合并有冲突,则需要先解决掉冲突,然后再用git push origin branch-name提交
      :若是git pull失败,则说明没有指定本地dev和远程origin/dev的链接,使用git branch --set-upstream-to=origin/branch-name branch-name来建立链接

标签管理

新建标签

  • 标签总是和某个commit相关联的
  • git tag name:在最新的commit上创建标签name
  • git tag:查看所有的标签
  • git tag -a tag-name -m “some information” commit_id:在commit_id创建名字为tag-name的标签
  • 可以省略-a和-m参数(tag-name必须有)
  • git show tag-name可以查看标签信息。

删除标签

  • 删除本地标签:git tag -d tag-name
  • 推送本地标签到远程库
    • git push origin tag-name
    • git push origin --tags:推送所有未推送的标签
  • 删除远程标签
    • 先删除本地标签:git tag -d tag-name
    • 在删除远程标签:git push origin :refs/tags/tag-name

参考:
github设置添加ssh:https://blog.csdn.net/binyao02123202/article/details/20130891
廖雪峰Git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值