zoukankan      html  css  js  c++  java
  • git命令总结

    git命令总结

    基本命令

    • git init 创建版本库
    • git add filename 将文件添加到版本库的暂存区
    • git commit -m "版本描述" 将文件从暂存区提交到版本库的当前分支
    • git status 查看当前仓库状态
    • git diff filename 查看文件不同版本的区别
    • git log 查看历史记录,显示从最近到最远的提交日志
    • git log --pretty=oneline
    • git reset --hard HEAD^ 回退到上一个版本
    • git reset --hard HEAD^^ 回退到上上个版本
    • git reset --hard HEAD~100
    • git reset --hard commit_id 指定回退到某个版本
    • git reflog 记录每一次命令,可用来查找未来版本的commit_id
    • git diff HEAD -- filename 查看工作区和版本库里最新版本的区别
    • git checkout -- filename 丢弃工作区的修改,即使用版本区的版本替换工作区的版本
    • git reset HEAD filename 将暂存区的修改撤销掉,重新放回工作区
    • git rm filename 从版本库中删除文件

    远程仓库


    1 创建ssh key

    • ssh-keygen -t rsa -C "**********@163.com"

    2 进入 https://github.com/settings/keys
    3 在key文本框中粘贴id_rsa.pub中的内容

    添加远程仓库

    在github中创建一个新的仓库
    Repository name填入learngit,点击添加
    按照提示在本地的learngit仓库运行命令:

    • git remote add origin https://github.com/UserName/learngit.git

    把本地库所有内容推送到远程库

    • git push -u origin master

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

    从远程库克隆

    1 登录github,创建一个新的仓库:gitskills
    我们勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。
    2 git clone https://github.com/UserName/gitskills.git
    git clone git@github.com:UserName/gitskills.git(推荐使用)

    分支管理

    每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。
    截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。
    HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,
    HEAD指向的就是当前分支。
    一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点。
    当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上
    1 创建分支、合并分支

    • git checkout -b 新分支 创建并切换到新分支

    相当于以下两个命令:

    • git branch dev
    • git checkout dev
    • git branch 查看当前分支
    • git checkout master 切换回naster分支
    • git merge dev 将dev合并到当前分支
    • Fast-forward信息:快进模式,直接把master指向了dev的当前提交
    • git branch -d dev 删除dev分支

    更科学的切换命令:

    • git switch -c dev 创建并切换到新的dev分支
    • git switch master 切换到已有的master分支

    合并冲突

    创建新的分支feature1,是master分支和feature1分支各自有新的提交,这种情况下,git无法执行快速合并,只能试图把各自的修改合并起来,该合并有可能会有冲突
    Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容

    • git log --graph --pretty=oneline --abbrev-commit 查看分支的合并情况

    分支管理策略
    通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
    强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
    --no-ff:表示禁用Fast forward

    • git merge --no-ff -m "merge with no-ff" dev 合并分支,禁用Fast forward

    在实际开发中,我们应该按照几个基本原则进行分支管理:
    首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
    干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

    • git stash 将当前工作现场储藏起来,等回复现场后继续工作
    • git stash list 查看工作现场去了哪
    • git stash pop 恢复现场并将stash内容删除(相当于git stash apply+git stash drop)
    • git stash apply stash@{0} 恢复指定的stash
    • git cherry-pick 4c805e2 复制一个特定的提交到当前分支
    • git branch -D feature-vulcan 强制删除分支
    • git remote -v 查看远程库的信息
    • git checkout -b branch-name origin/branch-name 在本地创建和远程分支对应的分支

    当other的最新提交和自己的有冲突时:

    • git pull 将最新提交从远程抓下来
    • git branch --set-upstream-to=origin/dev dev 指定dev和origin/dev的连接
    • git rebase

    rebase操作可以把本地未push的分叉提交历史整理成直线;
    rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

    标签管理

    切换到指定分支

    • git tag v1.0 创建一个新的标签
    • git tag 查看所有标签
    • 默认标签是打在最新提交的commit上的

    git tag v0.9 f52c633
    标签不是按时间顺序列出,而是按字母排序的

    • git shwo tagname 查看标签信息
    • git tag -a v0.1 -m "version 0.1 released" 1094adb 创建带有说明的标签

    注意:标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。

    • git tag -d tagname 删除标签
    • git push origin tagname 推送某个标签到远程
    • git push origin --tags 一次性推送全部尚未推送到远程的本地标签
    • git push origin :refs/tags/v0.9 删除远程标签(要将标签先在本地删除)

    git关联码云

    1 注册登录码云,上传ssh公钥
    2 创建仓库用于与本地关联

    • git remote -v 查看远程库信息
    • git remote rm origin 删除原有的远程库
    • git remote add gitee git@gitee.comUserName/learngit.git 关联码云远程库
    • git remote add github git@github.com:UserName/learngit.git 关联github远程库
    • git push 远程库 本地库 推送到远程库

    GUI:SourceTree

    • $ git config --global alias.st status 配置别名 git st=git status
    • $ git config --global alias.co checkout
    • $ git config --global alias.ci commit
    • $ git config --global alias.br branch
    • $ git ci -m "bala bala bala..."
    • 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"

     

    每个仓库的Git配置文件都放在.git/config文件中
    当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中

    搭建git服务器

    1 安装git: sudo apt-get install git
    2 创建一个git用户,用来运行git服务:sudo adduser git
    3 创建证书登录
    收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
    4 初始化git仓库
    先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:

    • sudo git init --bare sample.git

    把owner改为git:

    • $ sudo chown -R git:git sample.git

    5 禁止shell登录
    编辑/etc/passwd文件
    找到类似下面的一行:
    git:x:1001:1001:,,,:/home/git:/bin/bash
    改为:
    git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
    6 克隆远程仓库

    • git clone git@server:/srv/sample.git

     

  • 相关阅读:
    jquery获取浏览器URL参数
    jquery获取、设置、删除cookie
    jquery获取当前按钮、截取字符串、字符串拼接、动态循环添加元素
    Callback函数
    window.opener和window.open的使用
    JavaScript内置对象
    SeaJS:一个适用于 Web 浏览器端的模块加载器
    hihocoder 1388 &&2016 ACM/ICPC Asia Regional Beijing Online Periodic Signal
    Codeforces Round #373 (Div. 2)
    fzu 1759Super A^B mod C 指数循环节
  • 原文地址:https://www.cnblogs.com/mfsdebug/p/11992378.html
Copyright © 2011-2022 走看看