zoukankan      html  css  js  c++  java
  • git 使用笔记

    1. 授权同步

    #ssh-keygen -t rsa -C "yourEmail@xxx.com"

    按提示输入路径 /root/.ssh/id_rsa ,再连续输入2次 Enter 即可.

    #cd /root/.ssh

    将 id_rsa.pub 内容拷贝到要授权的账号的 Setting 的SSH里

    2. Git 常用命令

    概念:

    工作区: Linux/Windows 下的文件夹所在目录.

    暂存区Stage: 

    版本库:

    #git init 

    #git add . // 添加所有修改的文件

    #git commit -m "xxx" // 提交到仓库

    #git status // 查看状态

    #git diff  xxx.file // 查看xxx文件与远程服务器

    #git branch // 查看本地分支

    #git branch -r // 查看远程分支

    #git push origin dev // 将本地的dev分支推送到远程

    #git push origin : heads/dev    // 删除远程的dev分支

    #git log // 查看提交历史记录,如果嫌输出信息太多,可添加参数 --pretty=oneline

    #git log --pretty=oneline

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

    // 其中, --graph 表示用ASCII字符串表示的简单图形,形象得展示每个提交所在的分支及其分化衍合情况。

    // --abbrev-commit 表示git会为你的SHA-1 值生成简短唯一的缩写,默认为7个字符来表示

    #git reflog  // 记录你的每一次提交。 可根据版本号恢复

    #git reset --hard HEAD^    // 回退到上一个版本, 上2个版本是 HEAD^^ , 上100个版本是 HEAD~100

    #git reset --hard elde17     // 也可以通过输入 6位哈希值 回退到指定版本

    #git checkout -- xxx   // 丢弃工作区的修改(让文件回到最近一次 git commit 或 git add 状态)。包括2种情况:

    1> xxx 修改后还未放到暂存区。(即还没执行操作 git add xxx )

    2> xxx 提交到暂存区后,又作了修改,现在需要撤销回到 暂存区 后的状态。也就是 git add 后的状态.

    #git reset HEAD xxx   // 将暂存区stage 的修改撤销掉

    git reset 可以回退版本,也可以将暂存区的修改退回给工作区。

    1> 当只是改乱了某个文件,并未执行 git add 操作时,直接 git checkout -- xxx 恢复文件.

    2> 当你改乱了某个文件,并执行操作 git add , 想丢弃修改,需要执行2步:

    git reset HEAD xxx;

    git checkout -- xxx;

    3> 当已经提交了不何时的修改到版本库,想要撤销本次提交, 只能 版本回退。 git reset --hard HEAD^

    #git rm xxx   // 删除文件

    1> 确实要删除 xxx 文件, 执行

    #git rm xxx

    #git commit -m "delete xxx"

    2> 错删了 xxx 文件, 已经执行了 git rm xxx 操作

    #git reset HEAD -- xxx   // 从最新版本库中获取 xxx 文件

    #git checkout -- xxx   // 将最新版本库中的xxx.txt 文件恢复到工作区

    建立新仓库:

    1> 适当的地方创建一个文件夹, 执行

    #git init

    2> 添加文件

    #git add .

    #git commit -m "add files"

    3> 关联远程库

    #git remote add origin git@github.com:xxx/xxx.git    // 

    4> 将本地库的所有内容推送到远程库上

    #git push -u origin master    

    // 第一次推送master分支时,加上-u参数,git不但会把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来.

    // 以后的推送就只要使用命令 git push origin master

    首次使用git的clone 或 push 命令连接github,会得到一个警告,输入 yes 即可。

    提示错误:

    ! [rejected] master -> master (non-fast-forward)
    error: failed to push some refs to 'git@github.com:sylarkim/yond.git'
    hint: Updates were rejected because the tip of your current branch is behind

    解决:

    #git pull  // 把最新的代码抓取下来

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

    #git branch --set-upstream dev origin/dev   // 设置dev 和 origin/dev 的链接

    #git pull  // 再次执行pull操作。执行成功,但是合并有问题,需要手动解决冲突,解决后,git add, git commit, git push

    #git push origin dev

    克隆

    #git clone git@github.com:xxx/xx.git

    创建合并删除分支

    #git branch  // 查看当前分支;  如 *master  当前分支前面会标一个*号

    #git checkout -b dev

    // 相当于下面的2条

    #git branch dev // 创建dev分支

    #git checkout dev // 切换到dev分支

    如在dev分支上做了修改,正常git add,git commit 后,要合并到master上

    #git checkout master // 切换回master分支

    #git merge dev  // 将dev分支合并到master

    #git merge --no-ff -m "merge with no-ff" dev // 合并分支时,git通常用Fast forward模式,这种模式,删除分支后,会丢失分支信息。

    // 使用参数 --no-ff 禁用Fast forward

    删除分支

    #git branch -d dev // 删除dev分支

    当dev工作进行到一半,出现个bug需要立刻处理,而dev内容由于未完成无法提交,可通过

    1> git stash   // 把当前工作现场储藏起来

    2> git status  // 此时工作区是干净的

    3> git checkout master  // 切换到主分支

    4> git checkout -b bug1  // 新建一个bug1分支

    ...

    5> git add, git commit 

    6> git checkout master

    7> git merge --no-ff -m "fixed bug1" bug1 // 合并bug1到master

    8> git branch -d bug1  // 删除bug1分支

    9> git checkout dev    // 切换回dev分支

    10> git stash list   // 查看刚才存储的工作现场

    11>

    >> 方法1:

    git stash apply  // 此命令恢复,但stash内容并不删除,需要用 git stash drop 来删除.

    如:

    # git stash apply stash@{0}

    >> 方法2:

    #git stash pop  // 恢复的同事把stash内容也删了,推荐使用此命令

    #git stash list  // 再次查看是否还存在内容

    dev下新建一个分支f1,在分支f1上已git add, git commit,再切回dev分支时,突然dev不想要f1分支,执行
    #git branch -d f1   // 删除分支,失败, 改成 

    #git branch -D f1   // 强行删除,丢弃一个没有被合并过的分支

    #git remote  // 查看远程库的信息。 参数 -v  显示更详细的信息

    #git push origin master // 将master 分支推送到远程对应的分支上

    #git push origin dev   // 推送dev分支

    master 分支是主分支,要时刻与远程同步

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

    小伙伴要在dev上开发,就必须创建origin的dev分支到本地:

    #git checkout -b dev origin/dev

    ...  // 对dev分支进行add,commit操作

    #git push origin dev

    多人协作的工作模式通常为:

    1> 试图用 git push origin branch-name   // 推送自己的修改

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

    3> 如果 git pull 失败,说明远程分支与本地分支的链接关系没有建立,执行:

    #git branch ---set-upstream branch-name origin/branch-name   // branch-name 可以任意命名,如dev

    4> 如果合并有冲突,手动解决冲突, add,commit,再git push origin branch-name 推送

    本地新建的分支,如果不推送到远程,对其他人是不可见的

    创建标签:

    #git checkout master // 切换到master分支

    #git tab v1.0   // 创建标签

    #git tag  // 查看所有标签

    为 版本 打一个标签

    #git tag v0.9 cc17032   // cc17032 为版本的SHA-1 值

    #git tag   //  查看标签

    #git show v0.9  // 查看标签信息

    #git tag -a v0.1 -m "version 0.1" cc17032  // 其中 -a 指定标签名; -m 指定说明文字; -s 用密匙签名

    #git tag -d v0.1  // 删除标签

    #git push origin tagname   // 将标签推送到远程

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

    如果已推送到远程,想删除标签,则

    1> git tag -d v0.9  // 先删除本地的标签

    2> git push origin : refs/tags/v0.9  // 远程删除标签

    git配置项

    #git config --global color.ui true   // git会适当地显示不同的颜色

    忽略特殊文件

    1> 新建一个.gitignore 文件

    2> 编写忽略文件内容:

    # ignore *.o
    *.o
    # ignore *.swp
    *.swp
    # ignore sbin bin
    sbin
    bin

    配置别名
    git config --global alias.st status // st代替status
    git st // 相当于git status
    git config --global alias.ci commit
    git config --global alias.br branch
    git config --global alias.co checkout
    以后提交就可以写成:
    git ci -m "xxx"
    --global 参数是全局参数,也就是这些命令在这台电脑的所有git仓库下都有用。

    git config --global alias.unstage 'reset HEAD' // 撤销修改
    git config --global alias.last 'log -1' // 显示最近一次的提交

    // 实用技巧
    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 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"
    --global是针对当前用户起作用,不加,则只针对当前的仓库起作用。
    每个仓库的配置文件都放在.git/config文件中,别名就在[alias]后面,要删除别名,直接把对应的行删除即可。
    当前用户的git配置文件放在主目录的.gitconfig中.配置别名可以直接修改这个文件,如果改错了,可以删掉
    文件通过命令设置。

    搭建git服务器
    1>sudo apt-get install git // 最好在Ubuntu或Debian下搭建。
    2>sudo adduser git // 创建一个git用户
    3>创建证书登陆,也就是id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个
    4>初始化git仓库
    选定一个目录,如/usr/local
    sudo git init --bare smart.git // 创建一个裸仓库,因为服务器上的git仓库纯粹是为了共享,不让用户直接登陆到服务器上去改工作区。
    sudo chown -R git:git smart.git // 把owner改为git
    5>禁用shell登陆。出于安全考虑
    编辑/etc/passwd,找到类似下面的一行:
    git:x:1001:1001:,,,:/home/git:/bin/bash
    改为
    git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
    这样,git用户可以正常通过ssh使用git,但无法登陆shell。
    6>克隆远程仓库
    git clone git@server:/xxx/smart.git

  • 相关阅读:
    核新同花顺数据结构
    python发送各类邮件的主要方法
    Tesseract-OCR引擎 入门
    ruby函数回调的实现方法
    软件单元测试之我见
    cocos cteator中tiled模式 用图集容易出线
    入坑CCC遇到的一些坑啊
    关于委托的理解
    火狐浏览器的三个坑
    抗锯齿的BUG
  • 原文地址:https://www.cnblogs.com/sylar-liang/p/4798846.html
Copyright © 2011-2022 走看看