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

  • 相关阅读:
    服务部署 RPC vs RESTful
    模拟浏览器之从 Selenium 到splinter
    windows程序设计 vs2012 新建win32项目
    ubuntu python 安装numpy,scipy.pandas.....
    vmvare 将主机的文件复制到虚拟机系统中 安装WMware tools
    ubuntu 修改root密码
    python 定义类 简单使用
    python 定义函数 两个文件调用函数
    python 定义函数 调用函数
    python windows 安装gensim
  • 原文地址:https://www.cnblogs.com/sylar-liang/p/4798846.html
Copyright © 2011-2022 走看看