git和gitlab的操作

文章目录

    • 一、配置用户名和邮箱
    • 二、理论
    • 三、实战
    • 四、回到过去
    • 五、版本对比
    • 六、修改最后一次提交
    • 七、Git分支
    • 八、合并和删除分支
    • 九、匿名分支和checkout命令
    • 十、Github操作

一、配置用户名和邮箱

项目级别优先于系统用户级别,二者都有的话采用项目级别

# 下面配置的是当前操作系统用户的配置
git config --global user.name "wuleibegreat"
git config --global user.email "[email protected]"
# 下面配置的是项目级别的配置
git config user.name "wuleibegreat"
git config user.email "[email protected]"

git config --list  # 就可以看到配置的信息了

二、理论

git是通过工作区域、暂存区域和Git仓库来管理的

  • 工作流程一般是:

1、在工作目录中添加,修改文件

2、将需要进行版本管理的文件放入到暂存区域

3、将暂存区域的文件提交到Git仓库

  • Git管理的文件有三种状态

已修改、已暂存、已提交

三、实战

1、首先在整个的工程文件夹下面进行git仓库的初始化

git init

2、然后建立一个readme.md的文件,然后将这个文件添加到暂存区,或者将所有的文件提交到暂存区域

git add readme.md 
git add ./*

然后为这次提交来一个说明解释,同时将暂存区的文件添加到了本地仓库中去了

这个要add一次commit一次

不然下面再add,然后再次commit,就会把之前的文件也commit上相同的。

git commit -m "add a project file" <文件名>

当然也可以直接一步到位

git commit -am "add new version"

3、查看状态

git status

如果突然不想加载这个文件了,类似于撤回,使用下面的命令可以将最近添加到暂存区的文件进行撤回

git reset HEAD <文件名>

4、取消暂存区文件的追踪

git rm --cached <文件名>

如果一旦对文件进行了修改,直接用上述的git add ,然后git commit覆盖掉暂存区域的文件。

想要将文件的修改撤销,可以将暂存区域的文件返回,替换掉修改的文件,就得使用下面的命令

git checkout -- <文件名字>

查看历史提交

git log

下面的图,从左往右,依次是工作区、暂存区、本地仓库

git和gitlab的操作_第1张图片

四、回到过去

回到上一个版本,加几个波浪线就是指向上面第几个版本的快照,当然也可以在后面加数字,波浪线加数字

但是这个只是修改了本地仓库和暂存区域的版本,并没有修改工作区域!(工作区域还是最新的版本)

这个是默认的,影响了暂存区域和本地仓库两个地方,所以你需要重新add 然后再commit

(ps:记住HEAD是本地仓库的指针,是指向本地仓库的各个版本)

git reset --mixed HEAD~

或者下面这个,和上面那个命令是一样的

git reset HEAD~

下面介绍两种不一样的

下面这个soft就不一样了

  • 移动HEAD的指向,将其指向上一个快照(版本)
  • 相当于撤销一次commit命令
  • 只影响本地仓库,不影响工作区和暂存区
git reset --soft HEAD~

下面这个hard会改变三个区域

  • 移动HEAD的指向,将其指向上一个快照(版本)
  • 将HEAD移动后指向的快照回滚到暂存区域
  • 然后将暂存区域的文件还原到工作目录
git reset --hard HEAD~

总结:上面soft只影响本地仓库;默认的,会影响到本地仓库和暂存区;hard会影响三个全部

如果想回滚到特定的版本,加上特定的git hash值就可以了(当然也可以往前滚)

git reset a234sd678

回滚个别文件(这个时候head指针没有改变)(git log)就可以看到所有的提交版本的hash值

git reset 版本快照  文件名/路径

五、版本对比

对比版本的步骤是这样的:

首先将文件上传到本地仓库以后,这个时候修改当前工作区域的文件

此时当前工作区域的文件和本地仓库的文件不一样了,想要对比上次上传的文件和此时的区别,使用下面的

git diff

比较任意两个版本的代码就用

git diff 版本ID1 版本ID2

如果只是比较之前的某个版本和当前工作区的区别

git diff 版本ID

比较暂存区域和仓库的区别

git diff --cached 版本ID

六、修改最后一次提交

有时候只更正了某个文件的一点点代码,没必要更新仓库中整个项目,这个时候用下面的命令

(这个时候应该已经使用了git add命令,也就是说暂存区内的项目是更新过好的,然而没有推到仓库,这个时候我们只想把改好的暂存区的推到仓库,但是并不像增加一个新的版本)

git commit --amend

就会进入到了一个vim界面,这时候暂存区修改的代码啥的已经推上去了,你只需要更新下提交说明就可以了。

如果你不想进入vim界面的话

git commit --amend -m "新的说明"

删除文件

git rm 文件名字
git -f rm 文件名字

但是这个命令删除的只是工作目录和暂存区域的文件(必须一样,不然就只能强制删除),也就是取消跟踪,在下次提交的时候不纳入版本管理,但是在仓库中还是存在这个文件的

可以退回到之前的版本就可以了

如果只是想删除暂存区的文件,只需要

git rm --cached 文件名

修改文件名字(工作区和暂存区就都会修改了)

git mv 旧文件名 新文件名

七、Git分支

1、创建分支

git branch 分支名字

使用下面的命令可以查看head指针指向哪里,这个时候就会发现,head指针指向了master的分支

git log --decorate

或者可以这么显示,一行只显示一个版本

git log --decorate --oneline
git log --decorate --online --graph --all

2、切换分支

git checkout 分支名

这个时候就会发现,head指针指向了其他的分支

八、合并和删除分支

合并分支的命令

git merge 分支名

如果出现合并的冲突,无非是是相同名字的文件,内容却不一样,这个需要改一下,这个会反应在文件中,注意看文件中各个分支的名字

修改更好之后,把修改好的文件进行git add 和git commit就可以了

删除分支

git branch -d 分支名字
git branch --delete 分支名字

九、匿名分支和checkout命令

匿名分支是没有名字的分支,在里面所做的任何更改都不会被保留的

如何将head指向匿名分支呢,比如说现在只有一个master的分支,没有任何分支,使用下面的命令,下面的命令本来是切换分支的

但是没有分支,这个时候切换到的就是匿名分支了

在这个分支下面你可以疯狂做实验,因为这里是不会被保存的

git checkout head~

如果做完实验,你切换回主分支就可以了,就不会被保存,但是如果实验做的比较好,你又想保存这个分支的话

注意看终端给你的提示,使用下面的命令在当前分支创建新的分支

git branch  

下面讨论一下checkout命令:

事实上checkout命令有两种功能,注意返回到哪个版本,工作目录里就是哪个版本了

1、从历史快照(或者暂存区域)中拷贝文件到工作目录

2、切换分支

下面重点区分下checkout和reset的区别,

区别

首先在恢复文件上面:

  • reset命令是将指定的文件恢复到暂存区域,而checkout命令是同时覆盖暂存区域和工作目录(注意他们都不会改变head指针的指向)
  • reset后面跟的是一个文件的时候,soft和hard是不允许被使用的

在恢复快照上面:

  • checkout命令更安全,因为checkout命令在切换分支前会检查一下当前的工作状态。如果不是clean的话,git不会允许这么做的,而reset-hard则是直接覆盖所有这样的数据
  • 另一个区别是如何更新head的指向,reset命令会移动head所在分支的指向(相当于整个版本都改了),而checkout命令只会移动head自身来指向另一个分支(原来的版本还在,只不过指针指向变了)

十、Github操作

1、首先在github网站上面创建一个仓库,这个仓库有它的特定的地址

但是我们每次往这个地址上推送的时候就很不方便,因为这个网址还是比较长的,那么我们可以把这个地址在我们的电脑上设置一个别名

2、下面的命令是在自己的电脑上为我们这个仓库的地址设置别名的

git remote add myseglab_complete https://github.com/wuleibegreat/myseglab_complete.git

然后用下面的命令可以看下如何取回(fetch)和推送(push)代码了

git remote -v

3、推送操作,下面这个就是将master这个分支的推送到我们的仓库里面了

git push 远程仓库地址 远程分支名字
git push myseglab_complete master

这个是我的仓库的token,需要代替密码进行操作

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wl6

4、克隆操作,把这个仓库里面的东西克隆到本地,有三个效果:

  • 可以完整的把远程库下载到本地
  • 创建原来相应的地址别名,和之前的那个一样
  • 同时本地的库也初始化了
git clone https://github.com/wuleibegreat/myseglab_complete.git

5、邀请其他人一起编辑仓库

进入到github仓库中——>setting界面——>collaborators(填写你要邀请的账号,点击add collaborator)——>右上角(copy invite link)——>发送邀请链接——>点击接受就可以了

6、拉取操作

pull = fetch + merge

具体就是

git fetch 远程库地址别名 远程分支名

git merge 远程库地址别名/远程分支名

 git fetch orgin master //将远程仓库origin的master分支下载到本地当前branch中(这里的origin是仓库名字,master分支)
 
 git log -p master  ..origin/master //比较本地的master分支和origin/master分支的差别
 
 git merge origin/master //进行合并

7、冲突的解决

如果说别人更新了一版最新的版本上去了,但是你下载的还是之前的版本,那么你写完提交的时候就提交不上了,因为你不是最新的版本。

8、跨团队协作

  • 首先让别的团队的人去fork需要远程协助的仓库,然后把这个仓克隆下来(从自己的账号克隆)
  • 修改完以后用自己的账号推送到远程仓库(这个还是之前的 远程仓库别名+分支名)
  • 发起pull request,这个是在code旁边的那个——>new pull request——>creat pull reqest
  • 然后你自己的团队点pull request就可以了
  • 里面有commit和merge审核合并等操作

9、SSH方式推送

ssh-keygen -t rsa -C 登录的邮箱地址

然后就会在/home下面生成/.ssh文件,里面有id_rsa,id_rsa.pub

然后复制id_rsa.pub里面的内容(全部复制),到用户setting的界面,里面有个SSH and GPG keys——>new ssh keys,粘贴到下面,title随便写

到仓库里面复制SSH的地址,创建别名myseglab_complete

git remote add myseglab_complete SSH地址

然后查看下ssh的信息

git remote -v

然后推送

git push myseglab_complete master

这个好处就是不用再搞账号密码了,直接SSH就可以完成(平时设置一个账号的可以用)

你可能感兴趣的:(工具的使用,git,github,macos)