git简单介绍以及使用

Posted 羊草

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git简单介绍以及使用相关的知识,希望对你有一定的参考价值。

相对于SVN/CVS/VSS这些集中式,Git 是一个开源的分布式版本控制系统。
git客户端下载
https://www.git-scm.com/download/
git远程仓库gitlab/github.com

基础概念

1.4个空间5种状态
2.本地仓库
3.远程仓库
4.分支
5.标签tag
6.stash

工作流程

git 最常用的操作

场景

将本地开发的代码推到远程仓库

准备工作:

  1. 新建远程仓库,得到一个远程仓库地址$url
  2. 进入项目目录执行以下操作
    git init
    git add .
    git commit -m "一期功能已完成"
    git remote add origin $url
    git push origin master:master

从远程仓库下载代码到本地仓库开发

git remote add origin $url
git pull origin $remoteBranch
或者(仅针对最后一个操作)
git pull origin $remoteBranch:$localBranch

不指定本地分支则默认合并到当前分支。
开发工作,做各种修改

git add .
git commit -m "二期功能修改完成"
git push origin $localBranch:$remoteBranch

上面例子用到的origin和master,都是可以自定义的名称。
origin类似host alias,master是常见的初始化本地仓库自动生成的分支名称

4个空间5中状态

4个空间

i.工作区(Working Area)
ii.暂存区(Stage)
iii.本地仓库(Local Repository)
iv.远程仓库(Remote Repository)

5种状态

未修改(Origin)

  • 已修改(Modified)&未追踪(Untracked)
  • 已暂存(Staged)
  • 已提交(Committed)
  • 已推送(Pushed)

本地

文件和仓库

操作


git init 创建本地仓库和工作目录
git add . 把当前目录所有内容添加到暂存区
git commit -m "对本地修改的描述" 暂存区的内容提交到本地仓库
附注:「git add .」中的 . 表示当前目录下的所有内容。若不像全部添加,. 可以替换为文件名,目录名。

查看

git status
git log
git log --pretty=oneline
git log --graph --pretty=oneline --abbrev-commit
git reflog
git ls-files

比较

1)比较工作区
不加任何参数表示比较工作区和暂存区(若stage无则取最近一次提交)
git diff a.txt

2)工作区和指定提交版本的比较
比较指定版本的所有改变
git diff $commit_id

3)比较指定版本的指定文件
git diff $commit_id a.txt

4)比较两个提交版本的区别
git diff $commit_id1 $commit_id2
git diff $commit_id1 $commit_id2 a.txt

删除

1)从工作区和版本控制里删除
git rm -f a.txt
git rm -rf $directory

2)仅从版本控制里删除
git rm -f --cached a.txt
git rm -rf --cached $directory

账户配置

1)配置本仓库的账户
git config user.name "yangchao"
git config user.email yangchao@qq.com
2)配置全局的账户
git config --global user.name "yangchao"
git config --global user.email yangchao@qq.com

3)查看配置
git config -l

撤销回滚

1)从暂存区恢复

add了但没commit,之后又对文件修改,想放弃本次修改,恢复到暂存区的内容。
git checkout a.txt
git checkout -- a.txt
执行git checkout a.txt 后,stage内的版本会覆盖掉工作区的内容

2)从本地仓库恢复

i.恢复所有
git reset --hard HEAD
将工作区所有内容置为最近一次提交到本地仓库的版本。

ii.恢复指定文件
git reset --hard HEAD会把当前工作区所有内容都恢复到上一次提交到状态,若只想
恢复指定文件
git checkout HEAD a.txt
语法为
git checkout $commit_id a.txt

其中,HEAD是指针,表示本地仓库的最新一次提交的版本。
HEAD^ 表示指针后移一位(次新),HEAD^^表示指针后移2位,即倒数第N+1次提交。

iii.误操作
如果不小心执行了git reset --hard HEAD
此时还有没有救就看被覆盖的数据是在工作区还是暂存区
如果是工作区,抱歉,无药可救
如果是暂存区,git fsck --lost-found 查看被抛弃的文件
到工作目录下的 .git/lost-found/other 目录中寻找已经add过的文件。

远程仓库

绑定、查看与配置

1)查看本地已经添加的本地仓库
git remote -v
2)本地添加远程仓库
git remote add origin $url
3)本地删除远程仓库关联
git remote remove origin
git remote rm origin

拉取pull/fetch/clone

拉取远程分支
克隆远程仓库到本地仓库
git clone $url
git pull = git fetch + git merge
git pull的完整格式
git pull origin $remoteBranch:$localBranch
若$localBranch不存在则会自动创建
拉取不相关的仓库
git pull origin master --allow-unrelated-histories

提交push

1)本地仓库推送到远程仓库
提交到远程仓库的分支如果不存在则会被自动创建
git push origin $localBranch:$remoteBranch
2)强制覆盖
git push --force origin $localBranch:$remoteBranch
git push -f origin $localBranch:$remoteBranch
强烈不建议!!!

3)指定默认远程主机
git push -u origin master
省略了远程分支。意思是把master分支提交到origin的master分支,并设定默认主机为origin。「之后就可以只用git push」将当前默认分支推送到origin的同名远程分支
当不指定远程分支名称
git push origin $localBranch
则会推送到分支名字为$localBranch 的远程分支,等同于
git push origin $localBranch:$localBranch
新建了名称为$localBranch的远程分支

删除

远程分支
删除远程分支
2种方法:

  1. 使用--delete
    git push origin --delete $remoteBranchName
    被保护的分支不能这么删除。一个空的远程仓库会将首次创建的分支定位被保护的分支和默认分支。被保护分支意味着不能删除。默认分支意味着当提交时不指定分支名称时被推送到的分支。
  2. 从本地推送一个空的分支到要删除的远程分支
    git push origin :$remoteBranch2Delete
    推送本地某个分支到远程指定分支语法为
    git push origin $localBranch:$remoteBranc
    当$localBranch为空表示推送空的分支到$remoteBranc,这个操作等同于删除了$remoteBranc

分支

当初始化本地仓库时默认自动创建master本地分支。

查看本地分支

git branch

查看本地关联的远程分支

git branch -r

查看所有分支

本地和已经拉取的远程分支
git branch -a

创建本地分支

git branch $newBranch

切换分支

git checkout $branchName

创建并切换分支

git checkout -b $newBranchName
则会将当前工作区的内容拷贝到新的分区
等同于执行了以下两条:

  1. git branch $newBranchName
  2. git checkout $newBranchName

合并分支

git merge $branchName
作用:把$branchName合并到当前分支

删除分支

git branch -d $localBranchName
附注:$localBranchName不能是当前分支,否则删除失败
强行删除
git branch -D $localBranchName

标签

标签tag跟一次commit类似,区别在于commit_id是一串哈希值,tag名字比commit_id具有可读性。

创建标签

git tag $tagName
比如git tag netsign_agent_rbc_v1.0.0
则在当前分支下创建了一个标签名称为netsign_agent_rbc_v1.0.0的标签

查看所有标签

git tag

对某次commit打标签

git tag $tagName $commit_id

查看标签详细信息

git show $tagName

创建带描述的tag

git tag -a $tagName -m "description" $commit_id

删除标签

git tag -d $tagName

本地标签推动到远程仓库

git push origin $tagName
推送所有标签
git push origin --tags

stash

正在开发时被迫切换到别的分支,而又不想提交本次的修改,可以先藏起来。stash的作用就是允许先藏本次的修改,不需要提交的前提下切换到别的分支操作。

隐藏内容

git stash

查看隐藏的内容

git stash list

恢复和删除:

git stash apply
git stash drop

恢复和删除

git stash pop

附注:
.gitignore 文件
在.gitignore 文件中填写不想被追踪的文件或者目录。
默认是提示追踪工作目录下的所有非空目录和文件。

以上是关于git简单介绍以及使用的主要内容,如果未能解决你的问题,请参考以下文章

Git使用基础篇

Git学习系列-Git基本概念

Git介绍下载安装以及基本使用

Git基础与Github

编译原理基础概念介绍

git的基础介绍和使用