zoukankan      html  css  js  c++  java
  • git-总结

    安装git

    查看git是否安装

    git
    The program 'git' is currently not installed. You can install it by typing:
    sudo apt-get install git
    安装git
    sudo apt-get install git
    

    创建版本库

    mkdir learngit
    cd learngit
    git init
    

    添加文件到git仓库,分两步

    第一步:git add <file>
    第二步:git commit -m "description information"
    
    git add --all
    git add 命令的all参数,表示保存所有变化(包括新建、修改和删除)。从git 2.0开始,all是git add的默认参数,所以也可以用git add . 代替
    

    查看当前git仓库状态

    git status
    查看修改后的文件跟原先有什么不同
    git diff <file>
    
    显示从最近到最远的提交日志
    git log
    git log --pretty=oneline
    

    版本回退

    git reset --hard HEAD^
    
    版本回退到某个版本
    git reset --hard 3628164
    
    git是跟踪修改的,每次修改如果不add到暂存区,就不会加入到commit中
    

    撤销修改

    git checkout -- file
    命令git checkout -- readme.txt 的意思是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况
    一种是readme.txt自修改后还没被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
    一种是readme.txt已经添加到暂存区,后又作了修改,现在,撤销修改就回到了添加到暂存区后的状态;
    总之,就是让这个文件回到最近一次git commit 或git add的状态。
    

    删除文件

    git rm test.txt
    git commit -m "remove test.txt"
    

    远程仓库

    1. 创建ssh key   

       ssh-keygen -t rsa -C "1126785053@qq.com"

    1. 登录Github,打开Account settings

       Add SSH Key

    添加远程仓库

    git remote add origin git@github.com:liruizhong/learngit.git
    git push -u origin master
    git push origin master
    

    克隆一个远程仓库到本地

    git clone git@github.com:liruizhong/gitskill.git
    

    分支管理

    • 创建与合并分支
    • 创建一个dev分支,然后切换到dev分支
    git checkout -b dev
    

      等同于

    git branch dev
    git checkout dev
    

    查看当前分支

    git branch
    *dev
     master
    当前分支前会标一个*号
    

    合并指定分支到当前分支

    git merge dev
    

    删除分支,此处以删除dev为例

    git branch -d dev
    

    小结

    • 查看分支:git branch
    • 创建分支:git branch
    • 切换分支:git checkout
    • 创建+切换分支:git checkout -b
    • 合并某分支到当前分支:git merge
    • 删除分支:git branch -d

    解决冲突

    git log --graph --pretty=oneline --abbrev-commit 可以查看到分支合并图
    

    分支管理策略

      在实际开发中,我们应该按照介个基本原则进行分支管理
    首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
    那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
    你和你的小伙伴每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

    小结

    • Git分支十分强大,在团队开发中应该充分应用
    • 合并分支时,加--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

    DUG分支

    1. 去修复bug前,将当前工作去储存 git stash
    2. 然后切换到要修复bug的分支git checkout master
    3. 创建临时分区修复bug :git checkout -b issue-101
    4. 修复完成提交:git add readme.txt git commit -m "fix bug issue-101"
    5. 切换回主分支:git checkout master
    6. 将issue-101分支合并到主分支:git merge --no-ff -m "merged bug fix 101" issue-101
    7. 删除临时分支issue-101:git branch -d issue-101
    8. 然后切换回原工作区:git checkout dev
    9. 查看自己当时的储存工作现场:git stash list

    恢复工作现场:

    • 一种方法: git stash apply stash@{0} git stash drop
    • 另一种方法:git stash pop

    Feature分支

    小结:

    • 开发一个新的feature,最好新建一个分支
    • 如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除

    多人协作

    多人协作的工作模式通常是这样的:

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

      如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令
    git branch --set-upstream branch-name origin/branch-name
    这就是多人协作的工作模式,一旦熟悉,就非常简单。

    小结:

    • 查看远程库信息,使用:git remote -v
    • 本地新建的分支如果不推送到远程,对其他人就是不可见的
    • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交
    • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致
    • 建立本地分支和远程分支的关联,使用git branch --set-upsream branch-name origin/branch-name
    • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

    标签管理

    创建标签

    小结

    • 命令git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id;
    • git tag -a -m "blablabla..." 可以指定标签信息;
    • git tag -s -m "blablabla..." 可以用PGP签名标签;
    • 命令git tag 可以查看所有标签;

    操作标签

    小结

    • 命令git push origin 可以推送一个本地标签;
    • 命令git push origin --tags 可以推送全部未推送过的本地标签;
    • 命令git tag -d 可以删除一个本地标签;
    • 命令git push origin :refs/tags/可以删除一个远程标签

    使用GitHub

    小结

    • 在GitHub上,可以任意Fork开源仓库;
    • 自己拥有Fork后的仓库的读写权限;
    • 可以推送pull request给官方仓库来贡献代码。

    忽略特殊文件

    小结

    • 忽略某些文件时,需要编写.gitignore;
    • .gitignore文件本身要放到版本库里,并且可以对.gitinore做版本管理!

    配置别名

    git config --global alias.st status
    git config --global alias.co checkout
    git config --global alias.ci commit
    git config --global alias.br branch
    git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
    

    配置文件

    $ cat .git/config 
    [core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = true
    [remote "origin"]
        url = git@github.com:michaelliao/learngit.git
        fetch = +refs/heads/*:refs/remotes/origin/*
    [branch "master"]
        remote = origin
        merge = refs/heads/master
    [alias]
        last = log -1
    
    
    $ cat .gitconfig
    [alias]
        co = checkout
        ci = commit
        br = branch
        st = status
    [user]
        name = Your Name
        email = your@email.com
    
  • 相关阅读:
    c++基础_矩阵乘法
    c++基础_字符串对比
    c++基础_时间转换
    c++基础_特殊回文数
    c++基础_回文数
    c++基础_特殊的数字
    c++基础_杨辉三角形
    c++基础_字母图形
    c++基础_01字串
    java 常用集合类型--以及其特性
  • 原文地址:https://www.cnblogs.com/migongci0412/p/5159370.html
Copyright © 2011-2022 走看看