Git

作者: captainluck | 来源:发表于2020-03-12 11:31 被阅读0次

    git

    git基本操作

    获取与创建项目命令

    1. git init : 初始化一个Git仓库,执行完后会生成一个.git

      创建一个项目(空文件夹或者已有的项目),在终端中打开这个项目,执行仓库初始化。

      $mkdir runoob
      $cd runoob/
      $git init
      Intialized empty Git repository in /user/tuanqixin/www/.git/
      # 在/www/runoob/.git/目录初始化空 Git仓库完毕
      
    2. git clone : 拷贝一个Git仓库到本地,可以查看并修改。或者复制一个项目,查看代码

      $git clone [url(远程仓库)]
      

    基本快照

    1. git add : 可将创建的文件从工作区添加到暂存区,如果添加后的文件有所改动,会自动回到工作区,需要再次添加到暂存区,然后再提交。

      • git add . 命令来添加当前项目的所有文件(新项目中添加所有文件很普遍)
    2. git status 命令用于查看项目的当前状态(如果没有需要添加或者提交的文件,或者没有改动的文件则会显示nothing to commit, working tree clean。)

    3. git diff 来查看执行git status 的结果的详细信息

    4. git commit :将想要快照的内容写入缓存区,而执行命令(add)后将缓存区内容添加到仓库中。Git为你的每一个提交都记录你的名字与电子邮箱地址,第一步要配置用户名和邮箱地址

      git config --global uesr.name "your name"
      git config --global user.email "your email"
      git conmmit -m
      # -m选项在命令行中提交注释
      git commit -am
      # 添加和提交文件合并成一步
      
    5. git reset HEAD : 用于取消已缓存的文件,文件回到工作区

    6. git rm : 从Git中移除某个文件,将该文件提交以后执行此项命令即可删除。

      • git rm <file>
        
      • 如果提交文件以后,对文件进行修改,文件自动回到工作区,在add到暂存区,如果此时想要删除文件用强制删除选项 -f

       git rm -f <file>
      
      • 如果把文件从暂存区域移除,但仍希望保留在当前工作目录中,即:仅从跟踪清单中删除,使用--cached选项即可。

        git rm --cached <file>
        
    7. git mv : 用于移动或重命名一个文件、目录、软连接。

      git mv
      

    Git分支管理

    1. 创建分支命令

    • git branch (branchname)
      

    2.切换分支命令

    • git checkout (branchname)
      git checkout -b (branchname)
      # 创建并切换到分支branchname
      

    3.合并分支:

    • 一旦某分支有了独立的内容,希望将它合并回到主分支,可以使用该命令。

    • 可以多次合并到统一分支,也可以选择在合并之后直接删除被并入的分支。

    • git merge
      

    4.列出分支

    • git branch
      * master
      # 没有参数时,git branch会列出你在本地的分支
      # *号显示当前所在的分支
      # 当执行git init的时候,默认情况下Git就会创建master分支
      

    4.删除分支命令:

    • git branch -d (branchname)
      

    合并冲突:

    • 合并并不仅仅是简单的文件添加、移除的操作,Git也会合并修改。

    • $ git branch
      * master
      $ cat hello.py
      $ git branch yyp
      $ vim hello.py
         hello yyp!
      $ git commit -am 'change the hello.py'
      $ git checkout master
      Switched to branch 'master'
      $ cat hello.py
      $ vim hello.py
      $ cat hello.py
        hello python!
      $ git commit -am "修改代码"
      $ git merge yyp
      $ cat hello.py
       hello python!
       ============
       hello yyp!
      $ vim hello.py
      $ cat hello.py
       hello yyp!
      $ git status -s
      D hello.php
      AA hello.py
      $ git commit
      [master 7732186] Merge branch 'yyp'
       
      

    Git查看提交历史

    • git log:在使用Git提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,使用git log 命令查看。

    • git log --oneline:查看历史记录的简洁的版本。(项目的开发历史)

    • git reflog :简洁显示所有的提交记录

    • git log --graph :查看历史中什么时候出现了分支、合并。开启了拓扑图选项。(何时工作分叉、又何时归并)

    • git log --reverse 参数来逆向显示所有日志。

    • git log --author :查找指定用户的提交日志

    • git log --since和--before

    • git reset --hard 版本号(42cb617)(HEAD{0})

      git log --onelinr --before={3.weeks.ago} --after={2010-04-18} -- no merges
      # 查看Git项目中三周前在四月十八日之后的所有提交,——no merges 选项以隐藏并提交
      

    Git标签

    • git tag -a : 创建一个带注解的标签,指定标签信息
    • git lag --decorate:查看标签
    • git show v1.0:查看v1.0标签的注释
    • git tag -a v0.9 85fc7e7: 给85fc7e7追加标签v 0.9
    • git tag :查看所有标签
    • git tag -s <tagname> -m ’runoob.com标签‘:PGP签名标签

    Github

    • git remote add [shorttime] [url]:添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用

    • ssh-keygen -t rsa -C 'yourmain@example.com'(Github注册的邮箱)

    • cat ~/.ssh/id_rsa.pub : 查看ssh

    • ssh -T git@github.com : 验证是否成功连接Github

    • 本地的内容推送到GitHub仓库

      $ mkdir yyp-git-test      #创建测试目录
      $ cd yyp-git-test/        #进入测试目录
      $ echo '#yyp' >>README.md  #创建README.md文件,并写入内容
      $ ls                       #查看目录下的文件
      README.md
      $ git init                #初始化
      $ git add README.md       #添加文件
      $ git commit -m "添加README.md文件" #提交并备注信息
      #提交到Github
      $ git remote add origin git@github.com.yyp-223/yyp.git
      $ git push -u origin master
      
      • # 远程命令  添加  远程仓库的别名 远程仓库的地址
        git remote add origin 远程仓库地址
        
      • 推送master分支到远程仓库

         向origin 仓库上推送 master分支
        git push -u origin master 
        #-u指定默认,以后git push 默认推送mast分支(不建议使用-u)
        
    • 拉取远程仓库

      git clone 远程地址
      git branch
      # 此时本地只显示master地址,但所有的分支都已经拉取下来了
      git pull origin dev 
      # 只拉取dev分支
      
    • 拉取最新的仓库代码时如果与本地冲突

      • 先将发生冲突的本地代码提交后再拉取,手动处理冲突。

      • git pull origin dev 
        #等同于
        git fetch origin dev(避免产生分叉)
        git merge origin/dev
        

    变基

    • 场景一:多个记录整合成一个记录

      git rebase -i #某一次的提交记录信息,合并到当期那提交记录
      git rebase -i HEAD~3 #最近的三次提交记录合并
      #出现 Vi 编辑区域
      根据下面提示选择
      一般我们会将 pick 修改为 s
      # 保存退出 再次出现 vi 的编辑区
      列出要合并的提交记录
      例如修改为 v1 & v2 & v3
      # 保存
      git log #查看提交记录
      注意:尽量不要合并已经提交到远程仓库的(提交记录)
      
    • 场景二:

    master c1 - c2 -c4 -c5

    dev c3

    Mater c1 -c2 -c3 -c4-c5

    将c3在其他分支上的提交记录 合并到master分支上

    git checkout dev
    git rebase master # 变更当前dev分支的基
    git checkout master
    git merge dev
    
    • 场景三:远程拉取代码,会有合并冲突,产生分叉

       git pull origin dev
      #可能产生记录分叉
      git fetch origin dev
      git rebase origin/dev
      #不产生记录分叉
      
    • 注意事项

      • git rebase 产生冲突怎么办?
      • 会提示
        • 1、解决冲突
        • 2、git add
        • 3、Git rebase --contine

    相关文章

      网友评论

          本文标题:Git

          本文链接:https://www.haomeiwen.com/subject/zhwyjhtx.html