zoukankan      html  css  js  c++  java
  • git 基本使用

    1.集中式版本管理系统和分布式版本管理系统

    集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。

    集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟。

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

    分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

    2.创建版本库

    git init

    该命令会将该目录变成git可以管理的仓库。

    (注意:不要轻易使用Windows自带的文本编辑器,他会带来很多的问题,可以使用notepad++,可以设置他的默认编码为UTF-8 without BOM)

    3.添加文件

    1)git add aaa.txt

    2)git commit -m "加上文件说明"

    add 可以多次添加文件,git add . 可以添加所有文件。commit可以一次提交所有。

    4.查看状态

    git status

    该命令可以让我们时刻掌握仓库当前的状态

    git diff  文件名

    该命令查看difference,显示的格式正是Unix通用的diff格式

    5.查看git的提交历史

    git log

    为减少输出的信息,可以添加--pretty=oneline参数

    eaadf4e385e865d25c48e7ca9c8395c3f7dfaefcommit id(版本号)一个SHA1计算出来的一个非常大的数字,用十六进制表示。为防止同一个版本库里工作人员提交的冲突。

    6.版本回退

    在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

    git reset --hard HEAD^

    查看文件内容 --- cat 文件名。

    如果想要回退到回退前的版本,只要知道版本号就可以:

    git reset --hard 1094a 版本号没必要写全,前几位就可以了,Git会自动去找。

    那如何找到commit ID 呢?git中有一个命令用来记录你的每一次命令
    git reflog

    7 工作区和暂存区

    工作区:电脑里能看到的目录。
    工作区中一个隐藏的.git目录不算工作区,而是git的版本库。
    在git的版本库中存在一个重要的东西称为stage(index)暂存区和git为我们创建的第一个分支master,以及指向master的指针叫head
    git add 其实就是将文件添加到暂存区,而git commit 实际上试讲暂存区中的内容提交到当前分支。

    8.修改撤销

    1)当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

    2)当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了1),第二步按1)操作。

    3)已经提交了不合适的修改到版本库时,想要撤销本次提交,使用版本回退。(前提,没有远程提交)

    9. 删除文件

    git rm file
    
    git commit -m "remove"

    如果手动误删

    git checkout -- test.txt

    git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

    命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容

    10. 本地仓库与远程仓库关联

    git remote add origin git@server-name:path/repo-name.git

    远程库的名字就是origin

    git push -u origin master

    git push命令,实际上是把当前分支master推送到远程。

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

    11.远程库克隆到本地

    git clone git@github.com:michaelliao/gitskills.git

    12.创建分支

    git checkout -b dev

    -b参数表示创建并切换,相当于

    git branch dev
    git checkout dev

    13 查看当前分支

    git branch

    14 分支合并

    git merge dev

    git merge命令用于合并指定分支到当前分支。

    15 删除分支

    git branch -d dev

    16 冲突解决

    使用git status查找冲突的位置

    Git用<<<<<<<=======>>>>>>>标记出不同分支的内容

    修改冲突在提交

    git log --graph命令查看分支合并图

    17 分支管理策略

    合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

    git merge --no-ff -m "merge with no-ff" dev

    请注意--no-ff参数,表示禁用Fast forward;

    查看: git log --graph --pretty=oneline --abbrev-commit
    合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

    18 BUG分支

    git stash

    可以将当前工作线程储藏起来,以后可以恢复在使用。

    查看刚才的工作现场
    git stash list

    Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:

    一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

    另一种方式是用git stash pop,恢复的同时把stash内容也删了:

    可以恢复指定的stash:
    git stash apply stash@{0}

    19.feature分支删除

    Git友情提醒,feature-vulcan分支还没有被合并,如果删除,将丢失掉修改,如果要强行删除,需要使用大写的-D参数。

    20. 查看远程库

    git remote
    git remote -v

    21推送分支

    Git就会把该分支推送到远程库对应的远程分支上
    git push origin(远程) master(本地)
    如果推送失败,用git pull抓取远程新提交的代码

    • master分支是主分支,因此要时刻与远程同步;

    • dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

    • bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;

    • feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

    22 本地分支和远程分支的关联

    git branch --set-upstream branch-name origin/branch-name

    在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

    创建远程origindev分支到本地,于是他用这个命令创建本地dev分支:

    git checkout -b dev origin/dev

    解决冲突

    先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送;

    git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接;

    23 多人协作

    1. 首先,可以试图用git push origin <branch-name>推送自己的修改;

    2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

    3. 如果合并有冲突,则解决冲突,并在本地提交;

    4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

    24 rebase操作

    rebase操作的特点:把分叉的提交历史“整理”成一条直线,看上去更直观。缺点是本地的分叉提交已经被修改过了。

    25 创建标签

    git tag v1.0

    查看标签

    git tag
    git show v0.9

    对某次commit id 打标签

    git tag v0.9 f52c633

    还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字

    git tag -a v0.1 -m "version 0.1 released" 1094adb

    26 删除标签

    git tag -d v0.1

    因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。

    如果要推送某个标签到远程,使用命令

    git push origin v1.0

    一次性推送全部尚未推送到远程的本地标签
    git push origin --tags

    删除远程标签 ---先从本地删除,然后,从远程删除。

    git tag -d v0.9
    git push origin :refs/tags/v0.9
  • 相关阅读:
    codevs 2632 非常好友
    codevs 1213 解的个数
    codevs 2751 军训分批
    codevs 1519 过路费
    codevs 1503 愚蠢的宠物
    codevs 2639 约会计划
    codevs 3369 膜拜
    codevs 3135 River Hopscotch
    数论模板
    JXOJ 9.7 NOIP 放松模拟赛 总结
  • 原文地址:https://www.cnblogs.com/ntbww93/p/9969795.html
Copyright © 2011-2022 走看看