zoukankan      html  css  js  c++  java
  • git的几十个基本面

    1、下载git?
    git-scm.com

    2、获取帮助
    git help
    git help config

    3、什么是Git?
    版本控制系统,Version Control System, VCS。它允许我们提交变化到源代码管理库,并且跟踪变化。允许develope在同一套代码库上协同工作。是现代的、分布式版本控制系统。

    4、一些关键词?
    Branch
    Merge
    Commit:发生在本地
    Push
    Pull

    5、git的历史
    创建于2005年,一开始Linux kernel使用BitKeeper作为版本控制系统,后来Linus kernel和BitKeeper拆分,BitKeeper的拥有公司无法再提供免费服务,Linux需要一个新的版本控制系统替代BitKeeper,Linux的程序员们开始重造轮子,并在以后完善了社区,并诞生了GitHub.

    6、CVS和DVC?
    CVS是Centralized Version Control,程序员们向同一台中央服务器提交;DVC是Distributed Version Control,每个人都有自己的代码控制库,每次提交是提交到本地的,每次提交了一个新版本的代码,然后是push到远程。多人协作的一个场景:A和B协同工作,A把代码commit到本地,B直接从A的本地代码库pull,当A完成阶段工作,push到远程代码服务器,B现在可以从远程代码库pull代码了。

    7、一些命令?
    init,创建本地代码库
    status,本地代码库的状态,显示没有commit的变化
    add,把文件放到本地代码库
    commit,把变化提交到本地代码库
    log,显示提交的所有变化
    push,push所有的变化到远程代码服务器,还可以提交到多个地方
    pull,从远程代码服务器或其它代码库pull变化
    merge,合并变化

    8、git配置

    git config --global user.name "darren"
    git config --global user.email "764190362@qq.com"
    git config --global --list

    信息被存放在了管理员文件夹中的.gitconfig文件中,大致是:
    [user]
        name = darren
        email = 764190362@qq.com

    git config --global core.editor note 使用哪个编辑器
    git config --global help.autocorrect 1 当出现错误命令会有提示
    git config --global color.ui auto 设置字体颜色等
    git config --glboal core.autocrlf false windows下推荐使用

    以上的设置是System级别的。

    还可以设置用户级别的,用户级别可以覆盖System级别。

    git config user.name "jack"

    用户级别移除设置:git config --unset core.autocrlf

    9、创建本地代码库, 追加文件, 提交变化

    → 来到某个文件夹,打开命令行窗口
    → 创建本地代码库
    git init
    → 在文件夹内创建一个README.txt文件
    → 查看本地代码库的状态
    git status
    红色字体表示没有被tracked的文件
    → 把文件添加到本地代码库,使文件可以被track
    git add README.txt
    git add -u 用来add刚被更新的文件,而不是刚添加的文件
    git add -A add所有文件到staging area被track等待被commit
    此时,再运行git status,README.txt变成绿色,说明已经被track
    → commit变化
    git commit
    → 查看历史
    git log

    10、历史版本和版本差异

    → 查看历史版本
    git log
    → 查看版本差异
    git diff dd6819..a15ec6
    → 查看最近的历史版本
    git diff HEAD
    → 查看最近的历史版本之前的版本
    git diff HEAD~1
    → 查看最近历史版本和之前一个版本的差异
    git diff HEAD~1..HEAD
    也可以写成
    git diff HEAD~1..

    11、一次修改多次提交

    → 假设修改了2个文件
    README.txt
    file.txt
    → 查看状态
    git status
    此时可以看到修改的文件呈红色状态。通常一次commit就好,但这里就分两次commit
    → 第一次add
    git add file.txt
    → 第一次commit
    git commit -m "blablabla"
    → 第二次add
    git add README.txt
    → 第二次commit
    git commit -m "second blablabla"

    12、删除文件
    → 删除file.txt文件
    → 查看状态
    git status
    deleted file.txt 并且是红色字体
    → 把删除也放到staging area
    git add -u
    → 查看状态
    git status
    deleted: file.txt 并且是绿色字体
    → commit
    git commit -m "blablabla"

    也就是说,对于删除的文件,也需要使用git add -u,把删除的文件放在staging area。

    13、重命名文件
    → 把file.txt重命名为newfilename.txt
    → 查看状态
    git status
    deleted: file.txt 红色字体(被重命名的文件在git看来是deleted状态)
    nefilename.txt 红色字体(新的文件在git看来是一个untracked状态)
    → 把deleted状态的文件和新文件放到staging area上去
    git add -A
    → 查看状态
    git status
    renamed: file.txt → newfilename.txt 绿色字体(git 记录下了重命名过程)
    → commit一下
    git commit -m "blablabla"

    14、撤销改变
    → 修改某个文件,比如README.txt
    → 查看状态
    git status
    modified: README.txt 红色字体
    → 撤销修改
    git checkout README.txt

    15、撤销多个改变
    → 修改某个文件,比如README.txt
    → 删除某个文件,比如newfilename.txt
    → 查看状态
    git status
    modified: README.txt 红色字体
    deletedL newfilename.txt 红色字体
    → 撤销这2个改变
    git reset -hard
    → 查看状态
    git status
    回到最近的一次HEAD

    16、删除文件
    → 创建文件
    temp1.txt
    temp2.txt
    → 查看状态
    git status
    temp1.txt 红色字体
    temp2.txt 红色字体
    → 删除文件
    git clean -f

    17、忽略文件
    → 假设创建logs文件夹和线面的log.txt
    → 查看状态
    git status
    logs/ 红色字体
    → 创建.gitignore文件,内容如下:
    /logs/*.txt
    /logs/*.log
    → 查看状态
    git status
    .gitignore 红色字体
    → 把.gitignore文件放到staging area
    git add .gitignore
    → 提交
    git commit -m "Added .gitignore"

    18、拷贝远程网站到本地
    → 拷贝
    git clone https://github.com/jquery/jquery.git
    → 查看所有的提交
    git log
    git log --oneline

    19、查看数据
    → 查看总共多少次提交
    git log --oneline | wc -1
    → 查看带图标
    git log --oneline --graph
    → 查看哪些人提交了哪些
    git shortlog
    → 查看哪些人以及邮件
    git shortlog -sne
    → 查看更多
    比如在github网站上,有一个Graphs菜单,里面有更详尽的信息。

    20、查看提交
    → 展示最后一次提交
    git show HEAD
    → 展示倒数第二次提交
    git show HEAD~1
    → 展示所有提交
    git log --oneline
    → 展示最后10次变化
    git show HEAD~10
    → 展示某一次提交
    git show 5642626
    → 查看远程
    git remote
    origin 远程名称为origin的代码库
    → 查看远程更多
    git remote -v
    origin https://github.com/jquery/jquery.git(fetch)
    orgin https://github.com/jquery/jquery.git(push)

    21、Git Protocol

    ● git支持http、https、git、ssh和file协议
    ● http的默认端口是80,https的默认端口是443,可以设置
    ● 对于比如说github上的网站,通常读取是自由的,但写通常需要密码
    ● git protocol
    git 9418 git://github.com/jquery/jquery.git
    ● ssh protocol
    ssh 22 git@github.com:jquery/jquery.git
    ● file protocol
    file n/a /Users/James/code/jquery

    22、查看分支和标签
    → 查看本地分支
    git branch
    → 查看远程分支
    git branc -r
    → 查看tag
    git tag
    可以看到所有版本

    23、本地代码库复制到远程,在远程创建代码库
    → 在本地代码库基础上创建远程代码库
    git remote add origin https://github.com/Darrenji/example.git

    24、从远程fetch
    → fetch
    git fetch
    把远程所有变化拉到本地
    → fetch某个分支
    git fetch origin

    25、远程变化同步合并到本地
    → 远程有一个变化,有可能是另外一个程序员提交
    → 同步合并到本地
    git merge origin/master

    26、从远程拉
    → 查看远程分支
    git branch -r
    origin/master 红色字体
    → 现在准备拉pull,pull等同于:git fetch; git merge origin/master
    → 建立远程和本地的映射
    git branch --set-upstream master origin/master 第一个master是指本地
    → 开始拉
    git pull

    27、推到远程
    → 本地提交一些变化
    git commit -am "blabla"
    → 推
    git push
    输入用户名
    输入密码

    当然还可以在推之前删除远程
    → 删除远程
    git remote rm origin
    → 列出远程
    git remote -v
    → 重新创建一个SSH协议的远程
    git remote add origin git@github.com:Darren/Example.git
    → 推
    git push

    注意:SSH协议这里使用SSH key进行认证用户

    28、创建标签
    → 创建标签
    git tag v1.0
    git tag -a v1.0_with_message
    git tag -s v1.0_signed
    → 列出所有标签
    git tag
    → 列出某个标签
    git tag -v v1.0_signed

    29、把标签推到远程
    → 默认情况下git不推标签
    git push --tags

    30、可视化分支
    →查看现有分支下的提交
    git log --graph --oneline
    → 查看所有分支下的提交
    git log --graph --oneline --all --decorate
    --all所有分支
    --docorate比如HEAD,tag等

    还可以把以上的选项放到全局去并使用别名调用:
    → 全局设置
    git config --global alias.lga "log --graph --oneline --all --decorate"
    → 使用新的命令
    git lga

    31、创建本地分支
    → 创建本地一个分支
    git branch feature1
    → 跳转到feature1这个分支
    git checkout feature1
    → 查看所有分支下的提交
    git log --graph --oneline --all --decorate

    32、分支和标签的区别
    branch会跟着commits,tag始终跟着一个commit。

    → 创建一个分支并让它跟着一个commit
    git branch fix1 974b56a
    → 切换到fix1
    git checkout fix1
    → 修改fix1下的某个文件
    → 提交
    git commit -am "blabla"

    33、重命名和删除分支
    → 重命名分支
    git branch -m fix1 bug1234
    → 删除分支
    git branch -d bug1234
    → 想git报告删除分支的事
    git branch -D bug1234
    → 创建并切换到新创建的分支
    git checkout -b feature2

    34、把删除的分支找回来
    → 输入如下
    git reflog

    5a78c8b HEAD@{3}: commit: Fixed bug#1234
    → 找回分支
    git branch bug1234 5a78c8b
    → 切换到找回的分支
    git checkout bug1234
    → 展示HEAD
    git show HEAD

    注意:commit保存期只有30天

    35、不提交变化隐藏变化
    → 修改某个文件,比如README.txt
    → 查看状态
    git status
    modified: README.txt 红色字体
    → 隐藏变化
    git stash
    → 查看隐藏的所有变化
    git stash list

    36、创建远程分支
    → 推到远程的某个分支上
    git push origin master
    → 把本地branch推到远程
    git push origin v1.0_fixes
    远程会多了一个分支
    → 查看远程分支
    git branch -r

    37、删除远程分支
    → 先推到远程分支
    git push origin v1.0_fixes
    git push origin v1.0_fixes:v1.0_fixes_remote_branch_name(远程和本地分支名称不一样)
    → 删除远程分支
    git push origin:v1.0_fixes_remote_branch_name

    38、git网站设置
    通常在git网站,比如github, coding.net都会有一些基本设置的地方。

    ========最近又作了一些git的练习,整理在下面====================================================

    1、Repository包含什么

    文件、历史记录、配置文件

    2、git repository的3个状态

    ● working directory:通常有一个隐藏的.git文件
    ● staging area:也叫git index
    ● commit

    3、master branch

    8d976fa→626968e→65a7416→a877955→1bf9179
    默认的brach叫master

    4、Windows安装git

    git-for-windows.github.io
    安装完后打开git bash,输入:git version

    5、简单使用

    → 在github上创建一个new repository
    → 创建目录
    mkdir projects
    → 导航到目录
    cd projects/
    → 全局配置
    git config --global user.name ""
    git config --global user.email ""
    git config --global --list
    → 复制远程git repository的地址
    → 复制到本地
    git clone https://github.com/demo/demo.git
    → 查看本地repository的状态
    git status
    一般是On branch master,默认显示名称为master的这个branch
    → 创建文件
    echo "some words" >> start.text
    → 查看文件列表
    ls
    → 显示文件
    cat start.txt
    → 查看状态
    git status
    start.txt为红色字体,表示untracked file,也就是说在working directory,还没有在staging area
    → 放到staging area中去
    git add start.txt
    → 查看状态
    git status
    start.txt为绿色字体,表示已经在staging area中了
    → 提交
    git commit -m "adding start txt file"
    → 提交到远程
    git push origin master
    远程的名称是origin,在从远处拷贝过来的时候默认就是这个名称
    master是默认的远程分支

    6、从本地的一个空目录开始

    → 创建一个目录
    → 初始化并创建一个git目录
    git init fresh-project
    → 来到刚创建的fresh-project,查看所有文件,包括隐藏文件
    ls -al
    发现有一个.git目录
    → 来到.git目录,查看
    branches/
    → 来到fresh-project目录,查看状态
    git status
    On branch master告诉我们目前在master这个branch上,我们是可以创建其它branch的
    → 创建一个新文件hipster.txt
    → 查看状态
    git status
    hipster.txt为红色字体,表示这个是untracked file
    → 放到staging area中去
    git add hipster.txt
    → 查看状态
    git status
    new file: hperster.txt 绿色字体
    → 提交
    git commit -m ""
    [master (root-commit) a7781a] ..., root-commit表示是第一次提交

    7、从本地的一个已有项目开始

    → 下载一个示例项目
    http://initializr.com
    → 比如下载项目在一个名称为web-project的目录中
    → 来到web-project目录下
    git init
    → 查看列表,包括隐藏文件
    ls al
    .git/目录存在着
    → 查看状态
    git status
    On Branch master
    → 把所有文件放到staging area
    git add .
    → 提交变化
    git commit -m ""

    8、从远程的一个git项目开始

    → 远程的git项目
    https://githbu.com/scm-ninja/starter-web
    → 点击Fork按钮把项目加入到自己的github账户下
    → 复制https url
    → 拷贝到本地
    git clone https://github.com/somename/starter-web.git

    9、简单使用add, commit, pull, push

    → 本地一个git目录
    → 创建一个新文件hipster.txt
    → 查看状态
    git status
    hipster.txt红色字体
    → add
    git add hipster.txt
    → commit
    git commit -m ""
    [master ba5b0f0],master是默认的分支,ba5b0f0是SHA-1,用来标记每一次提交
    → 从远程拉取
    git pull origin master
    强烈推荐养成的习惯:commit之后,先pull,再push
    → 推到远程
    git push origin master
    5c05047..ba5b0f0 master → master, 表示从本地的master默认分支推送到远程的master分支

    10、git的tracking files

    → 输入如下查看git repository tracking的所有文件
    git ls-files
    → 把多个修改放到staging area
    git add .


    11、回滚提交的变化

    → 从staging area中移除
    git reset HEAD level1-file.txt
    → 回滚
    git checkout -- level1-file.txt

    12、重命名文件

    → 重命名,比如把level3-file.txt重命名为level3.txt,使用git的重命名命令
    git mv level3-file.txt leve3-file.txt
    → 查看状态
    git status
    renamed: level3-file.txt → level3.txt,绿色字体
    也就是重命名后,依然在staging area,不需要重新add
    → 提交变化
    git commit -m ""


    →如果使用操作系统的命令,重命名某个文件
    mv level2-file.txt leve2.txt
    → 查看状态
    git status
    deleted: level1-file.txt 红色字体
    level2.txt 红色字体
    说明档使用操作系统的命令,会删除原先的,并且创建一个新的,并且被删除的和新建的都不在staging arean
    → add
    git add -A
    → 提交变化

    移动文件也是相似的道理。

    13、移除文件

    → 创建一个文件doomed.txt
    → git status
    doomed.txt红色字体
    → 使用git命令移除
    git rm doomed.txt
    提示无法移除,因为还没有tracking这个文件呢
    → 那就使用操作系统命令删除
    rm doomed.txt
    → ls
    没有
    → git status
    也没有
    也就是说,刚创建的文件没有被tracking,使用操作系统的删除命令是可以的


    如果删除一个被tracking的文件呢?

    → 查看所有正在被tracking的文件
    git ls-files
    比如有一个newfile.txt文件
    → 使用git命令删除
    git rm newfile.txt
    → 使用ls命令,已不再目录中
    → 使用git status
    deleted: newfile.txt 绿色字体
    → git commit -m "",也就是让repository知道这个文件已被删除
    → 使用git status
    没有
    也就是说,使用git的rm命令删除staging area中的文件,也是物理删除,执行命令后必须告诉或同步到repository,commit一下

    tracking中的文件被删除,如何回滚呢?


    → 查看所有正在被tracking的文件
    git ls-files
    比如有一个hipster.txt文件
    → 使用git命令删除tracking的文件
    git rm hipster.txt
    → ls
    发现不在目录中了
    → git status
    deleted: hipster.txt 绿色字体,说明这个文件也在staging area了,对git来说,这个文件还没有被真正删除
    → 此时想把这个文件从staging area中拉出来
    git reset HEAD hipster.txt
    → ls
    依然不在目录中
    → git status
    deleted: hipster.txt 红色字体,说明这个文件依然被track,但在目录中已经不存在。注意从staging area中拉出来和是否是tracking是两码事。
    → 回滚
    git checkout -- hipster.txt

    注意:如果我们想回滚,先必须使用reset HEAD命令把文件从staging area中拉出来
    → ls目录中存在文件,git status发现文件不再被track

    如何删除目录呢?

    → 比如有一个目录是level1
    → rm -rf level1
    → ls查看,目录已经没有
    → git status
    deleted: leve1/leve1.txt 红色字体
    deleted: leve11/level2/level2.txt 红色字体
    deleted: level1/level2/level1/level3.txt 红色字体

    level1以及子目录都标记为删除,还在track状态,但并不在staging area中
    → git add -A

    deleted: leve1/leve1.txt 绿色字体
    deleted: leve11/level2/level2.txt 绿色字体
    deleted: level1/level2/level1/level3.txt 绿色字体

    在track状态,并且在staging area了,准备提交
    → 提交变化

    14、git历史记录

    → 查看语法
    git help log
    → git log
    查看到所有的提交记录
    → git log --abbrev-commit
    查看精简的commit编号
    → git log --oneline --graph --decorated
    → git log ae6f872...761b911
    → git log --sicne="3 days ago"
    → 查看某个文件的历史记录
    git log -- hopster.txt
    → git log --follow -- level1/level2/level3
    → 查看某次提交
    git show b19...

    15、别名

    → 比如本来查看历史记录的这样写
    git log --all --graph --decorate --oneline
    可不可以写成 git hist来得到相同的结果呢?
    → 在全局配置
    git config --global alias.hist "log --all --graph --decorate --oneline"
    → 使用别名命令
    git hist
    → 如何修改别名命令呢
    实际上是存在在.gitconfig文件中,类似:
    [alias]
    hist = log --all --graph --decorate --oneline

    16、忽略不必要的文件

    → 存放在哪里呢
    .gitignore
    → git add .gitignore
    → git status
    new file: .gitignore
    → git commit -m ""
    → 来到.gitignore文件
    *.log

    17、推送
    → 先拉取
    git pull origin master
    → 再推送
    git push origin master

  • 相关阅读:
    HOJ 2139 Spiderman's workout(动态规划)
    FZU 2107 Hua Rong Dao(dfs)
    Java 第十一届 蓝桥杯 省模拟赛 计算机存储中有多少字节
    Java 第十一届 蓝桥杯 省模拟赛 计算机存储中有多少字节
    Java 第十一届 蓝桥杯 省模拟赛 计算机存储中有多少字节
    Java 第十一届 蓝桥杯 省模拟赛 合法括号序列
    Java 第十一届 蓝桥杯 省模拟赛 合法括号序列
    Java 第十一届 蓝桥杯 省模拟赛 合法括号序列
    Java 第十一届 蓝桥杯 省模拟赛 无向连通图最少包含多少条边
    Java 第十一届 蓝桥杯 省模拟赛 无向连通图最少包含多少条边
  • 原文地址:https://www.cnblogs.com/darrenji/p/5204198.html
Copyright © 2011-2022 走看看