searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享

云计算开发工作常用的git命令

2023-12-05 06:13:51
7
0

发展过程
       Git最初是由Linux开发者Linus用了仅仅两周时间纯C语言编写而成,在编写完成之后就立马上手接管Linux源代码,不过在此之前Linux是由BitMover公司开发的BitKeeper分布式版本控制系统所管理源代码,它是商业收费的分布式版本控制器,但BitMover公司看中Linux开源精神,免费授权给Linux社区使用,在2002年时,Linux开始使用BitKeeper分布式版本控制系统管理源代码,但好景不长,有一天Linux社区成员Andrew(samba(局域网共享文件c/s程序)的作者)试图破解BitKeeper共享给所有人使用,被BitMover公司发现并收回了免费使用的版权,随后Linus就用了两周时间开发出了git(两周时间包括测试),也就是目前为止最好用的分布式版本控制系统。大名鼎鼎的github用的就是git系统来管理它们的网站,这里需要区分一下,github和git是两个东西,github是一个社区,git是一个服务系统,github只支持git分布式系统,所以故名成为github。

集中式与分布式的区别
       除了git还有svn、cvs这样的版本控制系统,它们的区别在于一个是分布式一个是集中式。集中式就是svn和csv这样的版本控制系统,分布式是git区别在于集中式的版本控制系统每次在写代码时都需要从服务器中拉取一份下来,并且如果服务器丢失了,那么所有的就都丢失了,你本机客户端仅保存当前的版本信息,换句话说,集中式就是把代码放在一个服务器上集中管理,你的所有回滚等操作都需要服务器的支持。分布式的区别在于,每个人的电脑都是服务器,当你从主仓库拉取一份代码下来后,你的电脑就是服务器,无需担心主仓库被删或者找不到的情况,你可以自由在本地回滚,提交,当你想把自己的代码提交到主仓库时,只需要合并推送到主仓库就可以了,同时你可以把自己的代码新建一份仓库分享给其它人。像集中式它们都有一个主版本号,所有的版本迭代都以这个版本号为主,而分布式因为每个客户端都是服务器,git没有固定的版本号,但是有一个由哈希算法算出的id,用来回滚用的,同时也有一个master仓库,这个仓库是一切分支仓库的主仓库,我们可以推送提交到master并合并到主仓库上,主仓库的版本号会迭代一次,我们客户端上的git版本号无论迭代多少次,都跟master无关,只有合并时,master才会迭代一次。

Debian/Linux安装Git
sudo apt install git
如果找不到使用search命令检索一下

sudo apt search git
配置git环境:git config --global
参数讲解:config:参数是用来配置git环境的  ;--global:长命令表示配置整个git环境

初次使用git需要设置你的用户名以及邮箱,这将作为当前机器git的标识,如果你用它来下载远程仓库一些需要登录权限的仓库会要求登录,git默认使用配置邮箱以及用户名登入,但会要求你手动输入密码

用户名配置git config --global user.name "你的用户名"
邮箱配置git config --global user.email "你的邮箱"!不配置也行,当遇到要求登录权限的远程仓库会让你在手动输入用户名、邮箱、以及密码

创建本地空仓库:git init
init:初始化当前目录为仓库,初始化后会自动将当前仓库设置为master创建本地仓库的条件是需要一个空目录,然后在空目录中初始化你的项目

如我想创建一个名为“test”的空项目

1.创建目录   mkdir test
2.进入目录   cd test
3.使用git init初始化当前仓库  git init

初始化后会生成git的配置文件目录,普通的"ls"命令是看不到的,我们需要使用ls -ah查看隐藏目录进入目录后可以看到它的相关配置文件

新建文件添加到本地仓库:git add、git commit -m
add:将文件添加到缓存区   commit:提交到本地仓库

git commit -m "add new file \"test.c\""
git commit 会为我们生成40位的哈希值,用于作为id,并把刚刚用git add添加到提交缓存区里的文件提交到本地仓库中,便于我们回滚,至此,这个文件就已经添加到本地仓库中了,同时本地仓库也迭代了一个版本。

改写提交:git commit --amend
--amend:重写上一次的提交信息

查看历史提交日志:git log          log:查看日志
回滚代码仓库:git reset --hard     reset参数是重置命令         --hard是重置代码仓库版本

有三种模式--soft 、--mixed以及--hard是三个恢复等级。使用--soft就仅仅将头指针恢复,已经add的暂存区以及工作空间的所有东西都不变。
如果使用--mixed,就将头恢复掉,已经add的暂存区也会丢失掉,工作空间的代码什么的是不变的。如果使用--hard,那么一切就全都恢复了,头变,aad的暂存区消失,代码什么的也恢复到以前状态。
1.回滚到指定历史版本,先使用git log查看历史版本,在使用git reset --hard命令回滚

2.回滚当前仓库指向的版本,上面我们说过,HEAD是指向当前仓库的,历史版本中可能有别的分支,我们只想迭代我们仓库的上一个版本,这个很简单,我们只需要用HEAD来指向就可以了,git reset --hard HEAD^,^代表上一个版本的意思,HEAD代表当前仓库的指向,当前HEAD指向master,就代表回滚到master上一次提交的版本,当然我们也可以使用另外一种方式来回滚到当前仓库的指定版本git reset --hard HEAD~3
后面的~3,代表以当前版本为基数,回滚多少次。HEAD~3代表回滚master前三个版本,如果觉得log打印内容过多,可以加上--pretty=oneline选项简洁输出。

查看提交之后文件是否做了改动:git status   status:查看当前仓库状态。

查看单个文件可回滚版本:git log filename
当我们想回滚指定文件到指定版本时,需要查看该文件有多少个版本可以回滚时,可以使用git log filename命令

删除文件:git rm   如果我们使用普通的命令,rm删除文件,git状态会提示你删除了文件,你只需要使用add重新提交一次就可以了。当然你也可以使用git rm删除文件,但是也需要使用git commit提交一次

查看提交历史:git reflog,可以查看当前版本库的提交历史,凡是对仓库版本进行迭代的都会出现在这个里面,包括你回滚版本都会出现在这个历史中

git基本组成框架:Workspace、Index / Stage、Repository、Remote
Workspace:开发者工作区
Index / Stage:暂存区/缓存区
Repository:仓库区(或本地仓库)
Remote:远程仓库
Workspace:开发者工作区,也就是你当前写代码的目录,它一般保持的是最新仓库代码。

Index / Stage:缓存区,最早叫Stage,现在新版本已经改成index,位于.git目录中,它用来存放临时动作,比如我们做了git add或者git rm,都是把文件提交到缓存区,这是可以撤销的,然后在通过git commit将缓存区的内容提交到本地仓库

Repository:仓库区,是仓库代码,你所有的提交都在这里,git会保存好每一个历史版本,存放在仓库区,它可以是服务端的也可以是本地的,因为在分布式中,任何人都可以是主仓库。

Remote:远程仓库,只能是别的电脑上的仓库,即服务器仓库。

git rm后恢复文件:git rm、git reset、git checkout
此方法仅限git rm,因为git rm会先将文件放入缓存区,且没有使用commit提交的情况下

首先使用git rm删除一个文件

git rm d.c 在使用git reset重置所有缓存区操作

git reset 重置完成之后在使用git checkout命令将文件取消操作

git创建分支:git branch、git checkout
使用git checkout -b参数来创建一个分支,创建完成分支后会自动切换过去

git checkout -b dev
然后我们在使用branch来查看当前属于哪个分支,也就是查看HEAD的指向

git切换分支:git checkout
当我们想切换分支可以使用git checkout来切换,如刚刚我们创建了一个分支dev并切换了过去,现在切换回masterk

git合并分支:git merge
当我们新建分支并做完工作之后,想要把分支提交至master,只需要切换到master仓库,并执行git merge 分支名就可以了

git查看分支:git branch -a
如果要查看当前所有分支可以使用:git branch -a

github的使用
github是一款使用git命令作为基础框架的网站,它是一款开源分享网站,你开源把你的源代码放到github上,然后让人来start给你小星星,小星星越多代表你的项目越具有影响力,很多公司面试如果你有一个很多星星的项目,会大大提升你的录取率。

你也可以把你的一些项目分享到github上保存,github上是无限制代码的。

1.首先到github上注册一个你的账号

2.在本地创建一个ssh的key,因为github是使用ssh服务进行通讯的

ssh-keygen -t rsa -C "your_email@example.com"
-t 指定密钥类型,默认是 rsa ,可以省略。
-C 设置注释文字,比如邮箱。
-f 指定密钥文件存储文件名,一般我们默认,让存储到默认路径以及默认文件名

它会要求输入Enter file in which to save the key (/home/stephenzhou/.ssh/id_rsa)

这里是生成的sshkey文件名,我们可以回车使用默认文件名

除此之外还会让你输入Created directory '/home/stephenzhou/.ssh'.
Enter passphrase (empty for no passphrase): 
这个密码会在让你push提交时候要输入的,除了git登录密码,还要输入这个密码,直接回车则空密码,这里我们直接回车

接着会让你在此输入密码,验证这里依旧回车

Enter same passphrase again:

生成的ssh文件如果不使用-f指定的话会生成在用户目录下的.ssh目录中,.ssh是隐藏文件,可以使用ls -ah看到,使用cd ~进入用户主目录,然后cd进入到.ssh目录中可以看到文件,id_rsa是私匙,id_rsa.pub是公匙,id_rsa不能告诉任何人,只有公钥可以,ssh采用的是非对称加密。接着在github上添加你的公钥,最后在输入你的登录密码就可以了,这样ssh就添加成功了~,你可以添加如很多个ssh,比如你有多台电脑,在每个电脑上都配置ssh然后添加进来就可以了,git需要这个是要确定你是主人,确定是主人的机器推送的才可以推送到仓库中,但是你可以创建公开仓库,别人只能拉取不能推送到这个仓库中,你可以给其它人权限。

git命令总结
创造
克隆现有存储库$ git clone ssh://user@domain.com/repo.git

创建一个新的本地存储库$ git init

当地变化

将所有当前更改添加到下一个提交$ git add .

在中添加一些更改到下一次提交$ git add -p

提交跟踪文件中的所有本地更改$ git commit -a

提交先前进行的更改$ git commit

更改最后一次提交,不要修改已发布的提交!$ git commit --amend

提交历史
显示所有提交,从最新开始$ git log

显示特定文件随时间的变化 $ git log -p

分支机构和标签,列出所有现有分支$ git branch -av

切换HEAD分支$ git checkout

根据您当前的HEAD创建一个新分支$ git branch

基于远程分支创建一个新的跟踪分支$ git checkout --track

删除本地分支$ git branch -d

用标签标记当前提交$ git tag

更新和发布,列出所有当前配置的遥控器$ git remote -v

显示有关遥控器的信息$ git remote show

添加名为的新远程存储库$ git remote add

从下载所有更改,但不要集成到HEAD中$ git fetch

下载更改并直接合并/集成到HEAD中$ git pull

在远程上发布本地更改$ git push

删除遥控器上的分支$ git branch -dr

发布标签$ git push --tags

合并与基础,将合并到当前HEAD中$ git merge

将当前的HEAD重新设置到,不要重新发布已发布的提交!$ git rebase

中止基准$ git rebase --abort

解决冲突后继续进行基准$ git rebase --continue

使用您配置的合并工具解决冲突$ git mergetool

使用编辑器手动解决冲突,并(在解决之后)将文件标记为已解决$ git add  $ git rm

撤消
丢弃工作目录中的所有本地更改$ git reset --hard HEAD

放弃特定文件中的本地更改$ git checkout HEAD

还原提交(通过产生具有相反更改的新提交)$ git revert

将HEAD指针重置为上一次提交…并丢弃此后的所有更改$ git reset --hard …

并将所有更改保留为未分阶段的更改$ git reset …

并保留未提交的本地更改$ git reset --keep 

 

0条评论
0 / 1000
1****m
1文章数
0粉丝数
1****m
1 文章 | 0 粉丝
1****m
1文章数
0粉丝数
1****m
1 文章 | 0 粉丝

云计算开发工作常用的git命令

2023-12-05 06:13:51
7
0

发展过程
       Git最初是由Linux开发者Linus用了仅仅两周时间纯C语言编写而成,在编写完成之后就立马上手接管Linux源代码,不过在此之前Linux是由BitMover公司开发的BitKeeper分布式版本控制系统所管理源代码,它是商业收费的分布式版本控制器,但BitMover公司看中Linux开源精神,免费授权给Linux社区使用,在2002年时,Linux开始使用BitKeeper分布式版本控制系统管理源代码,但好景不长,有一天Linux社区成员Andrew(samba(局域网共享文件c/s程序)的作者)试图破解BitKeeper共享给所有人使用,被BitMover公司发现并收回了免费使用的版权,随后Linus就用了两周时间开发出了git(两周时间包括测试),也就是目前为止最好用的分布式版本控制系统。大名鼎鼎的github用的就是git系统来管理它们的网站,这里需要区分一下,github和git是两个东西,github是一个社区,git是一个服务系统,github只支持git分布式系统,所以故名成为github。

集中式与分布式的区别
       除了git还有svn、cvs这样的版本控制系统,它们的区别在于一个是分布式一个是集中式。集中式就是svn和csv这样的版本控制系统,分布式是git区别在于集中式的版本控制系统每次在写代码时都需要从服务器中拉取一份下来,并且如果服务器丢失了,那么所有的就都丢失了,你本机客户端仅保存当前的版本信息,换句话说,集中式就是把代码放在一个服务器上集中管理,你的所有回滚等操作都需要服务器的支持。分布式的区别在于,每个人的电脑都是服务器,当你从主仓库拉取一份代码下来后,你的电脑就是服务器,无需担心主仓库被删或者找不到的情况,你可以自由在本地回滚,提交,当你想把自己的代码提交到主仓库时,只需要合并推送到主仓库就可以了,同时你可以把自己的代码新建一份仓库分享给其它人。像集中式它们都有一个主版本号,所有的版本迭代都以这个版本号为主,而分布式因为每个客户端都是服务器,git没有固定的版本号,但是有一个由哈希算法算出的id,用来回滚用的,同时也有一个master仓库,这个仓库是一切分支仓库的主仓库,我们可以推送提交到master并合并到主仓库上,主仓库的版本号会迭代一次,我们客户端上的git版本号无论迭代多少次,都跟master无关,只有合并时,master才会迭代一次。

Debian/Linux安装Git
sudo apt install git
如果找不到使用search命令检索一下

sudo apt search git
配置git环境:git config --global
参数讲解:config:参数是用来配置git环境的  ;--global:长命令表示配置整个git环境

初次使用git需要设置你的用户名以及邮箱,这将作为当前机器git的标识,如果你用它来下载远程仓库一些需要登录权限的仓库会要求登录,git默认使用配置邮箱以及用户名登入,但会要求你手动输入密码

用户名配置git config --global user.name "你的用户名"
邮箱配置git config --global user.email "你的邮箱"!不配置也行,当遇到要求登录权限的远程仓库会让你在手动输入用户名、邮箱、以及密码

创建本地空仓库:git init
init:初始化当前目录为仓库,初始化后会自动将当前仓库设置为master创建本地仓库的条件是需要一个空目录,然后在空目录中初始化你的项目

如我想创建一个名为“test”的空项目

1.创建目录   mkdir test
2.进入目录   cd test
3.使用git init初始化当前仓库  git init

初始化后会生成git的配置文件目录,普通的"ls"命令是看不到的,我们需要使用ls -ah查看隐藏目录进入目录后可以看到它的相关配置文件

新建文件添加到本地仓库:git add、git commit -m
add:将文件添加到缓存区   commit:提交到本地仓库

git commit -m "add new file \"test.c\""
git commit 会为我们生成40位的哈希值,用于作为id,并把刚刚用git add添加到提交缓存区里的文件提交到本地仓库中,便于我们回滚,至此,这个文件就已经添加到本地仓库中了,同时本地仓库也迭代了一个版本。

改写提交:git commit --amend
--amend:重写上一次的提交信息

查看历史提交日志:git log          log:查看日志
回滚代码仓库:git reset --hard     reset参数是重置命令         --hard是重置代码仓库版本

有三种模式--soft 、--mixed以及--hard是三个恢复等级。使用--soft就仅仅将头指针恢复,已经add的暂存区以及工作空间的所有东西都不变。
如果使用--mixed,就将头恢复掉,已经add的暂存区也会丢失掉,工作空间的代码什么的是不变的。如果使用--hard,那么一切就全都恢复了,头变,aad的暂存区消失,代码什么的也恢复到以前状态。
1.回滚到指定历史版本,先使用git log查看历史版本,在使用git reset --hard命令回滚

2.回滚当前仓库指向的版本,上面我们说过,HEAD是指向当前仓库的,历史版本中可能有别的分支,我们只想迭代我们仓库的上一个版本,这个很简单,我们只需要用HEAD来指向就可以了,git reset --hard HEAD^,^代表上一个版本的意思,HEAD代表当前仓库的指向,当前HEAD指向master,就代表回滚到master上一次提交的版本,当然我们也可以使用另外一种方式来回滚到当前仓库的指定版本git reset --hard HEAD~3
后面的~3,代表以当前版本为基数,回滚多少次。HEAD~3代表回滚master前三个版本,如果觉得log打印内容过多,可以加上--pretty=oneline选项简洁输出。

查看提交之后文件是否做了改动:git status   status:查看当前仓库状态。

查看单个文件可回滚版本:git log filename
当我们想回滚指定文件到指定版本时,需要查看该文件有多少个版本可以回滚时,可以使用git log filename命令

删除文件:git rm   如果我们使用普通的命令,rm删除文件,git状态会提示你删除了文件,你只需要使用add重新提交一次就可以了。当然你也可以使用git rm删除文件,但是也需要使用git commit提交一次

查看提交历史:git reflog,可以查看当前版本库的提交历史,凡是对仓库版本进行迭代的都会出现在这个里面,包括你回滚版本都会出现在这个历史中

git基本组成框架:Workspace、Index / Stage、Repository、Remote
Workspace:开发者工作区
Index / Stage:暂存区/缓存区
Repository:仓库区(或本地仓库)
Remote:远程仓库
Workspace:开发者工作区,也就是你当前写代码的目录,它一般保持的是最新仓库代码。

Index / Stage:缓存区,最早叫Stage,现在新版本已经改成index,位于.git目录中,它用来存放临时动作,比如我们做了git add或者git rm,都是把文件提交到缓存区,这是可以撤销的,然后在通过git commit将缓存区的内容提交到本地仓库

Repository:仓库区,是仓库代码,你所有的提交都在这里,git会保存好每一个历史版本,存放在仓库区,它可以是服务端的也可以是本地的,因为在分布式中,任何人都可以是主仓库。

Remote:远程仓库,只能是别的电脑上的仓库,即服务器仓库。

git rm后恢复文件:git rm、git reset、git checkout
此方法仅限git rm,因为git rm会先将文件放入缓存区,且没有使用commit提交的情况下

首先使用git rm删除一个文件

git rm d.c 在使用git reset重置所有缓存区操作

git reset 重置完成之后在使用git checkout命令将文件取消操作

git创建分支:git branch、git checkout
使用git checkout -b参数来创建一个分支,创建完成分支后会自动切换过去

git checkout -b dev
然后我们在使用branch来查看当前属于哪个分支,也就是查看HEAD的指向

git切换分支:git checkout
当我们想切换分支可以使用git checkout来切换,如刚刚我们创建了一个分支dev并切换了过去,现在切换回masterk

git合并分支:git merge
当我们新建分支并做完工作之后,想要把分支提交至master,只需要切换到master仓库,并执行git merge 分支名就可以了

git查看分支:git branch -a
如果要查看当前所有分支可以使用:git branch -a

github的使用
github是一款使用git命令作为基础框架的网站,它是一款开源分享网站,你开源把你的源代码放到github上,然后让人来start给你小星星,小星星越多代表你的项目越具有影响力,很多公司面试如果你有一个很多星星的项目,会大大提升你的录取率。

你也可以把你的一些项目分享到github上保存,github上是无限制代码的。

1.首先到github上注册一个你的账号

2.在本地创建一个ssh的key,因为github是使用ssh服务进行通讯的

ssh-keygen -t rsa -C "your_email@example.com"
-t 指定密钥类型,默认是 rsa ,可以省略。
-C 设置注释文字,比如邮箱。
-f 指定密钥文件存储文件名,一般我们默认,让存储到默认路径以及默认文件名

它会要求输入Enter file in which to save the key (/home/stephenzhou/.ssh/id_rsa)

这里是生成的sshkey文件名,我们可以回车使用默认文件名

除此之外还会让你输入Created directory '/home/stephenzhou/.ssh'.
Enter passphrase (empty for no passphrase): 
这个密码会在让你push提交时候要输入的,除了git登录密码,还要输入这个密码,直接回车则空密码,这里我们直接回车

接着会让你在此输入密码,验证这里依旧回车

Enter same passphrase again:

生成的ssh文件如果不使用-f指定的话会生成在用户目录下的.ssh目录中,.ssh是隐藏文件,可以使用ls -ah看到,使用cd ~进入用户主目录,然后cd进入到.ssh目录中可以看到文件,id_rsa是私匙,id_rsa.pub是公匙,id_rsa不能告诉任何人,只有公钥可以,ssh采用的是非对称加密。接着在github上添加你的公钥,最后在输入你的登录密码就可以了,这样ssh就添加成功了~,你可以添加如很多个ssh,比如你有多台电脑,在每个电脑上都配置ssh然后添加进来就可以了,git需要这个是要确定你是主人,确定是主人的机器推送的才可以推送到仓库中,但是你可以创建公开仓库,别人只能拉取不能推送到这个仓库中,你可以给其它人权限。

git命令总结
创造
克隆现有存储库$ git clone ssh://user@domain.com/repo.git

创建一个新的本地存储库$ git init

当地变化

将所有当前更改添加到下一个提交$ git add .

在中添加一些更改到下一次提交$ git add -p

提交跟踪文件中的所有本地更改$ git commit -a

提交先前进行的更改$ git commit

更改最后一次提交,不要修改已发布的提交!$ git commit --amend

提交历史
显示所有提交,从最新开始$ git log

显示特定文件随时间的变化 $ git log -p

分支机构和标签,列出所有现有分支$ git branch -av

切换HEAD分支$ git checkout

根据您当前的HEAD创建一个新分支$ git branch

基于远程分支创建一个新的跟踪分支$ git checkout --track

删除本地分支$ git branch -d

用标签标记当前提交$ git tag

更新和发布,列出所有当前配置的遥控器$ git remote -v

显示有关遥控器的信息$ git remote show

添加名为的新远程存储库$ git remote add

从下载所有更改,但不要集成到HEAD中$ git fetch

下载更改并直接合并/集成到HEAD中$ git pull

在远程上发布本地更改$ git push

删除遥控器上的分支$ git branch -dr

发布标签$ git push --tags

合并与基础,将合并到当前HEAD中$ git merge

将当前的HEAD重新设置到,不要重新发布已发布的提交!$ git rebase

中止基准$ git rebase --abort

解决冲突后继续进行基准$ git rebase --continue

使用您配置的合并工具解决冲突$ git mergetool

使用编辑器手动解决冲突,并(在解决之后)将文件标记为已解决$ git add  $ git rm

撤消
丢弃工作目录中的所有本地更改$ git reset --hard HEAD

放弃特定文件中的本地更改$ git checkout HEAD

还原提交(通过产生具有相反更改的新提交)$ git revert

将HEAD指针重置为上一次提交…并丢弃此后的所有更改$ git reset --hard …

并将所有更改保留为未分阶段的更改$ git reset …

并保留未提交的本地更改$ git reset --keep 

 

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0