git版本控制

git基本操作


git初始化:

git init                  #初始化

git status                #查看文件状态

git ls-tree head          #查看版本中所有文件

git ls-files -s           #查看暂存区和版本中所有文件

git add fileName.py         #提交单个文件

git add .                 #添加所有文件到暂存盘

git commit -m "all file"  #从暂存盘提交到本地版本库,并加上注释

git log                   #查看日志(备注:git log退出方法 英文状态下按Q)


git reflog                #查看所有日志(包含之前回退后消失的版本记录)

git stash                 #将当前修改的内容保存到一个地方

版本/文件回退:

# 方式一:(3步)
git reset --soft 版本号  #从分支回到暂存区
git reset head 文件     #从暂存区回退到修改过的内容/文件创建前的状态
git checkout  文件名     #从修改过的文件到原文件

# 方式二:(2步)
git reset --mix 版本号  #从分支回到修改过的内容 == git reset 版本号
git check out  文件     #从修改过的文件到原文件

#方式三: (一部步操作)
git reset --hard 版本号  #直接从版本库中的分支回到原文件最初状态

这里写图片描述

案例1:

开发完短信功能后进行提交,之后再回退到开发短信功能之前的状态,最后再次回到短信功能开发的状态

#开发短信功能
    # 先创建msg.txt文件
    git add .
    git commit -m '开发短信功能完成'

#回滚(无短信功能):
    git log 
    git reset --hard 版本号

#再次回到短信功能:
    git reflog
    # 下面两步的操作等于 git reset --hard 版本号
    git reset --mix 版本号
    git checkout 文件名

案例二:stash 将工作区做的所有修改(做到一半的操作)保存到一个临时地方

应用场景:在同一版本下,新写的部分代码不想为了修改第1次版本的代码,而要再将新写的代码提交成第2个版本。

#- 正在写代码(a.txt),发现线上代码(a.txt)有bug,先把现在的代码保存到临时空间。
#- 修改完bug(a.txt)后提交,再次取回之前保存的文件,这时发现之前保存的代码和提交的bug是同一个文件,有冲突。
#- 这时(a.txt)中两者都保留,手动保留想要的代码,再次提交。

# 先将代码提交

# 在提交后的代码基础上写新的代码

git stash # 需要临时修复bug,将当前代码临时转移到到一个位置

 #修改bug后再次提交 
    bug....
    git add .
    git status
    git commit -m "修改完bug"

# 将临时代码释放回来,需要手动解决代码冲突(merge合并代码,或者版本回退,回退到写代码前的版本)

 git stash  apply  # 重新回到写新代码的状态
 git add .
 git status
  git commit -m "修改完bug后,重新提交的新代码"

分支


dev        # 负责开发新功能
bug        # 负责修复线上的bug
master   # 线上主分支的代码

dev开发分支

  git branch # 查看所有分支
        dev
      * master   # 当前分支
    git branch dev # 添加dev开发分支
    git branch # 查看分支
    git checkout dev # 切换到dev分支
    git branch 
      * dev
        master

bug分支

   git branch bug
    git branch
        bug
        dev
      * master
    git branch bug
    git checkout bug
    git branch
      * bug
        dev
        master

修改完bug 把bug分支和master合并

git checkout master
git merge bug  # 在master分支基础上将bug分支上的代码进行合并

远程仓库


从远程仓库拉取代码到本地仓库:

git remote add origin https://github.com/test.git  #设置从远程仓库拉取代码的地址,并设置别名为origin

git clone https://github.com/linhai1111/git_test.git   # 将远程仓库中的项目拉取到本地仓库

cd git_test  # 进入项目文件中

git branch  -a      #查看所有分支 ,包含远程的分支
#* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/dev

git branch dev origin/dev       #拉取远程仓库中dev分支的代码到本地,并创建出本地仓库的dev分支

# 将本地代码推送到远程仓库 
git remote add origin https://github.com/test.git  #设置远程仓库并设置别名origin
git checkout master  # 切换到master分支
git push origin master    #推送到master分支

远程仓库应用场景流程


在公司时:

# 将远程仓库中的项目拉取到本地后再提交到远程仓库中
git remote add origin https://github.com/a877252372/test.git
git checkout master
git push origin master  # 推送到远程仓库

回到家中:

git clone https://github.com/a877252372/wwwww.git

cd /test

git branch dev origin/dev   # 创建本地仓库中的dev分支,并将远程仓库中的dev分支的代码拉取到创建好的本地dev分支
git checkout dev  # 切换到dev分支
写代码

git add .
git commit ...
git push origin dev  # 将本地dev分支代码提交到远程仓库中的dev分支中

再次回到公司:

git checkout dev # 切换到dev分支

#将远程仓库中的dev分支代码拉取到本地,(选其中一个方式,推荐pull方式)
git fetch origin dev    # 从远程拉到本地的仓库 还需要    git reset --hard 文件        
git pull origin dev     # 从远程仓库中将dev分支的代码拉取到本地dev分支

#----------提交成功完成-----------
完成功能3开发
git add .
git commit ...
git push origin dev

#----------忘记提交,下班回家-------
完成功能4开发:
git add .
git commit ...
git push origin dev

再次回到家中:

git branch dev
git pull origin dev

完成功能5开发:
git add .
git commit ...
git push origin dev



第三次到达公司:

# 现在处于功能4处于没有提交的状态
#先拉代码查看功能4和功能5是否有冲突,如果有冲突需手动修改,不能直接提交. 

# 拉取代码:
git pull origin dev

无冲突:过
有冲突:手动解决
git add .
git commit -m '解决冲突'

协同开发应用场景流程


协同开发准备:

前期准备:在远程仓库中设置组织,并通过账户名邀请用户成为项目成员
- 项目协作者
- 组织

具体流程:

小明和小强同时在开发。

# 小明或小强在自己分支开发完成后推到远程仓库中。
    git clone ....

    git branch dev   # 小明和小强都要创建dev分支
    git branch review  # 小明和小强都需要创建的分支,专门用来合并各个成员的代码
    git branch xiaoming  # 只在小明在自己的本地仓库创建xiaoming分支
    git branch xiaoqian   # 只在小强在自己的本地仓库创建xiaoqian分支

    git pull origin dev   # 将远程仓库中的dev分支代码拉取到本地dev分支(小明和小强都要进行拉取)
    git pull origin review  # 小明和小强都需拉取该分支的代码
    git pull origin xiaoming  # 只需小明进行拉取,属于他专属的分支
    git pull origin xiaoqian   # 只需小强进行拉取,属于他专属的分支

    git checkout xiaoming  # 切换到xiaoming专属于的开发分支上进行开发
    git checkout xiaoqian  # 切换到xiaoqian专属于的开发分支上进行开发
    .......
    git add .
    git commit -m ""
    git push origin xiaoming  # 小明将代码推送到远程仓库中的xiaoming分支上
    git push origin xiaoqian  # 小强将代码推送到远程仓库中的xiaoqian分支上
# 小明进行代码合并,将自己的代码合并到review

git checkout review   # 切换到review分支
git pull origin review  # 将远程仓库中的review分支拉取最新的代码,到本地仓库中的review分支上
git merge xiaoming  # 将xiaoming分支合并到review分支上

git status 
git push origin review  # 再次将本地review分支推送到远程仓库中的review分支上,完成远程仓库中代码的更新
# 小强也进行代码合并,也将自己的代码合并到review
git checkout review
git pull origin review
git merge xiaoqiang   # 将xiaoqian分支合并到review分支上

git status
git push origin review

备注:2人同时提交时,后提交的人必须再次进行pull代码的操作来完成更新后,再提交时才不会报错。

项目fork


针对他人的项目进行fork后,可在本地自主进行项目修改,修改后可通过 New pull request 选项提交给项目原始人,由项目原始人负责是否引用该代码。

ssh免密登陆


该方式只针对ssh模式。

ssh-keygen -t rsa -C "xxxxx@xxxxx.com" -## 标题 ##f "d:\id_rsa"     # ssh-keygen生成sshkey
#xxxxx@xxxxx.com是个人邮箱
#d:\id_rsa 是生成的sshkey文件

或者直接生成到C盘:
cd ~/.ssh && ssh-keygen

cat id_rsa.pub | clip # 复制key
# 设置身份
git config --global user.name "bob"
git config --global user.email bob@...

最后生成两个文件id_rsa和id_rsa.pub,把这两个文件放到.ssh文件夹下,windows中.ssh文件夹一般在系统盘的用户下(c:\users)
这里写图片描述

用记事本把id_rsa.pub打开,把文本添加到oschina的公钥列表中
这里写图片描述

测试:

在git bash中输入ssh -T git@git.oschina.net    返回Welcome to Git@OSC, 你的名字! 表示添加成功。

注意事项:生成的sshkey文件一定要命名为id_rsa,因为ssh默认读id_rsa的sshkey。**


在完成以上配置后,提交代码还是需要输入用户名和密码,可以到本地git repository的.git\config文件,如果url使用的是https协议,改为git协议即可。

修改前:

[remote "origin"]  
    url = https://git.oschina.net/oschina/git-osc.git  
    fetch = +refs/heads/*:refs/remotes/origin/*  

修改后

[remote "origin"]  
    url = git@git.oschina.net:oschina/git-osc.git  
    fetch = +refs/heads/*:refs/remotes/origin/*  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值