git的操作总结

Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

  • 仓库建立

1.配置问题

因为Git是分布式版本控制系统,所以需要填写用户名和邮箱作为一个标识。

git config --global user.name "swimming"

git config --global user.email "[email protected]"

2.建立仓库

选择一个文件夹,cd进入文件夹,使用init git命令初始化仓库。此时仓库中会出现一个.git文件,表示创建成功。

现在这个文件夹就是你的本地仓库了,可以在里面放入代码和文件进行上传和版本控制,也可以将远程仓库(github和gitlab)中的文件进行clone

  • 常规操作

git clone

git clone用来克隆远程仓库的代码,复制远程仓库的链接,然后使用git clone 复制的链接将代码克隆到本地

git add a.txt 将a.txt添加到暂存区里面去

git commit: 使用git commit告诉git,文件已经提交到仓库里,git commit -m “注释” 

git status :查看当前的一些状态

git log :修改的历史记录

git reset  --hard HEAD~100 :版本退回,100表示退回到100个版本之前

在还没有commit之前如果想要撤销对文件的操作,可以使用checkout操作,如checkout --a.txt撤销对a.txt的操作

  • 远程仓库

1.首先配置ssh:ssh-keygen  -t rsa –C “[email protected]”,然后系统会告诉你秘钥生成的位置,打开秘钥的位置,有两个文件id_rsa.pub是公钥,将公钥添加到gitlab中

2.复制远程仓库的链接地址如[email protected]:root/sunwenbin.git,

本地仓库和远程仓库关联:git remote add origin [email protected]:root/sunwenbin.git,添加了一个origin远程链接

3.将本地文件push到远程仓库中:git push-u origin master,将本地仓库分支master上传push到origin中

注:由于远程库是空的,我们第一次推送master分支时,加上了–u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令

  • 使用git push报错解决方法
error: failed to push some refs to '[email protected]:你的远程库名.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

从提示可以看出,是由于两者不同步,因此需要先pull,进行合并然后在进行push,

因此先使用

git pull --rebase origin master

将远程文件同步下来。

然后再执行推送

git push -u origin master

4.git remote rm origin:删除已有的origin链接

5.从远程库clone仓库:git clone [email protected]:root/sunwenbin.git

  • 分支管理(git branch)

git branch 命令不仅仅能创建和删除分支,如果不加任何参数,它会给出当前所有分支的个数

git branch :列出目前所有的分支,同时显示当前所处的分支。

创建分支:git branch dev,创建了一个dev分支

切换分支:git checkout dev

创建并切换分支:git checkout  -b dev(相当于上面两步)

将dev分支合并到master分支中:首先切换到master分支,然后git merge –no-ff  -m “注释” dev

通常合并分支时,git一般使用”Fast forward”模式,在这种模式下,删除分支后,会丢掉分支信息,现在我们来使用带参数 –no-ff来禁用”Fast forward”模式,这样可以保护分支信息不丢失。

删除分支dev:git branch -d dev

  • 分支下载和上传:

下载

1.进入git仓库,下载主分支代码,执行命令:git clone [email protected]:root/sunwenbin.git

2.进入刚才clone的主分支目录,cd

3.切换到分支并下载代码

git checkout -b 远程仓库分支名字

git pull origin 远程仓库分支名字

推送

1.checkout到分支中,然后进行文件内容的修改,然后进行add,commit

2.推送分支:git push origin dev

pull和clone的区别:
git clone从远程服务器克隆一个一模一样的版本库到本地,复制的是整个版本库,叫做clone.(clone是将一个库复制到你的本地,是一个本地从无到有的过程)
git pull从远程服务器获取到一个branch分支的更新到本地,并更新本地库,叫做pull.(pull是指同步一个在你本地有版本的库内容更新的部分到你的本地库)
即clone是一个复制一个库,pull是复制一个分支

  • 多人协作

       多人协作工作模式一般是这样的:

  1. 首先,可以试图用git push origin branch-name推送自己的修改.
  2. 如果推送失败,则因为远程分支比你的本地更新早,需要先用git pull试图合并。
  3. 如果合并有冲突,则需要解决冲突,并在本地提交。再用git push origin branch-name推送

  当你从远程库克隆时候,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且远程库的默认名称是origin。

  1. 要查看远程库的信息 使用 git remote
  2. 要查看远程库的详细信息 使用 git remote –v

  如下演示:

 

  一:推送分支:

      推送分支就是把该分支上所有本地提交到远程库中,推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:

      使用命令 git push origin master

  比如我现在的github上的readme.txt代码如下:

  本地的readme.txt代码如下:

 

  现在我想把本地更新的readme.txt代码推送到远程库中,使用命令如下:

  我们可以看到如上,推送成功,我们可以继续来截图github上的readme.txt内容 如下:

  可以看到 推送成功了,如果我们现在要推送到其他分支,比如dev分支上,我们还是那个命令 git push origin dev

  那么一般情况下,那些分支要推送呢?

  1. master分支是主分支,因此要时刻与远程同步。
  2. 一些修复bug分支不需要推送到远程去,可以先合并到主分支上,然后把主分支master推送到远程去。

  二:抓取分支:

  多人协作时,大家都会往master分支上推送各自的修改。现在我们可以模拟另外一个同事,可以在另一台电脑上(注意要把SSH key添加到github上)或者同一台电脑上另外一个目录克隆,新建一个目录名字叫testgit2

  但是我首先要把dev分支也要推送到远程去,如下

  接着进入testgit2目录,进行克隆远程的库到本地来,如下:

 

  现在目录下生成有如下所示:

  现在我们的小伙伴要在dev分支上做开发,就必须把远程的origin的dev分支到本地来,于是可以使用命令创建本地dev分支:git checkout  –b dev origin/dev(第一个dev表示本地分支dev,第二个origin/dev表示远程分支的名字)

  现在小伙伴们就可以在dev分支上做开发了,开发完成后把dev分支推送到远程库时。

  如下:

  小伙伴们已经向origin/dev分支上推送了提交,而我在我的目录文件下也对同样的文件同个地方作了修改,也试图推送到远程库时,如下:

  由上面可知:推送失败,因为我的小伙伴最新提交的和我试图推送的有冲突,解决的办法也很简单,上面已经提示我们,先用git pull把最新的提交从origin/dev抓下来,然后在本地合并,解决冲突,再推送。

  git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接:如下:

  这回git pull成功,但是合并有冲突,需要手动解决,解决的方法和分支管理中的 解决冲突完全一样。解决后,提交,再push:

  我们可以先来看看readme.txt内容了。

  现在手动已经解决完了,我接在需要再提交,再push到远程库里面去。如下所示:

  

猜你喜欢

转载自blog.csdn.net/qq_29277165/article/details/81291661