git的使用和别名配置

字数 526阅读 1125

git

    git push http://git.anchong.net/ec/web.git  jinlong  //提交到自己的分支

    git pull http://git.anchong.net/ec/web.git master  //从服务端拉新代码

码云网站
阮一峰ssh博客

阮一峰ssh博客
git快捷键设置

服务器上

查看所有分支   git branch -a
删除某个分支     git push origin --delete 分支   比如long

推荐文章

够用一年的Git 技巧
10 个迅速提升你 Git 水平的提示

全局别名设置

vim ~/.bash_profile 填写一下内容,然后 执行source .bash_profile

alias gl="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit'"
alias ga='git add -A'
alias gb='git branch'
alias gk='git checkout'
alias gc='git commit -m'
alias gm='git merge'
alias gs='git status'
alias gls='git log -1'
alias gr='git reset --hard'
alias hao='git push origin master:long1'

比如要把 git status  设置成快捷键  git s 
git config --global alias.s status   
配置文件在  vi ~/.gitconfig
打开配置文件也可以看到刚才的  alias配置
删除的话,可以直接进入  .gitconfig 文件删除
或者  git config --global unset alias.s
git config --global alias gl="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch

常用指令

查看某个文件谁改过代码
git blame filename

概要

    brew安装的东西,位置都在`/usr/local/Cellar/`文件夹下面

    ps -ef|grep mysqld查看进程

    kill -9进程号结束进程

git是分布式版本控制svn是集中式版本管理

    设置用户名和邮箱

    git config --global user.email "you@qq.com" //全局配置

    git config --global user.name "your name"

    克隆:git clone http://地址,把github上的项目的整个仓库克隆岛本地。克隆的东西,除了有源代码,还有历史版本仓库。但是download下载的东西没有历史版本

    git help查看帮助指令

    git help -a查看所有帮助指令

    git help -g查看手册

    git help命令查看某个指令的作用.`f`键向下翻页,`b`键向上翻页,`q`退出显示帮助的信息

概念:

add之后会存放到暂存区,暂存区不是版本库

服务器端

1.创建用户
    useradd git//会自动保存在/home/目录夹下面   git用户必须必须chown -R git:git git.里面内容是什么用户无所谓

    passwd git //给git用户加上密码

    vi /etc/passwd查看用户密码

    vi /etc/group查看用户所在组
Paste_Image.png
2.禁用git用户shell登录(可选)
    vi /etc/passwd
    git:x:1001:1001:,,:/home/git:/bin/bash
    改为
    git:x:1001:1001:,,:/home/git:/bin/git-shell
3.创建文件uthorized_keys,存放客户端的公钥,使客户端能够访问git
    1.cd /home/git/    mkdir .ssh

    2.vi authorized_key   //这一步也可以省略,下一步的重定向会直接生成这个文件
  cat id_rsa.pub >> .ssh/authorized_keys   //把客户端传过来的公钥重定向到authorized_keys  然后需要重启服务器,才能使用使用
4.初始化仓库
    mkdir /opt/git

    cd /opt/git

    git init --bare test test.git  
   然后把他移动到git用户下面 
    mv  test.git  /home/git
5.更改文件或者目录的属主和属组
    chown -R git:git test.git

客户端(MAC)

1.把服务端git克隆到本地
    git clone ssh://git@innote.com:250/opt/git/test.git//如果有端口号,要写端口号,比如250。如果需要密码,就是服务端的密码。但是一般不用密码,一般用证书(公钥),将证书放在自己的服务器上
2.生成证书(建议输入密码)
    ssh-keygen -t rsa   生成公钥私钥

    位于~/.ssh中,id_rsa和id_rsa.pub   cd 进入

    *将id_rsa.pub的内容复制到服务器/home/git/.ssh/authorized_keys中
    scp id_rsa.pub long@192.168.1.110:   //这种方式是传到家目录'/home/long'下
    用scp上传建议传到家目录下,如果传到根目录下,会提示没有权限,上传不成功
Paste_Image.png

往服务器上推项目 -- git push 地址 分支(这里的分支是本地分支)

    git push https://git.oschina.net/long646/test.git  master
    
    
    如果不想每次都写提交地址,我们可以给远程仓库起一个别名
    git remote add origin(这个名字可以随便写) https://git.oschina.net/long646/test.git
    git remote remove(或者rm) origin   ----删除关联的远程服务器别名
    
    以后提交的时候只需要以下代码即可
    git push origin master   ----origin是远程地址的简写
    如果代码推不上去,我们可以用一下代码,强制推送
    git push -f origin master.
    
    git remote -v  ----------------查看关联到的远程服务地址的别名
    
    每次推代码的时候都需要输入密码,如果使用公钥的话,关联的地址智能是`git`,而不能再使用`https`了 

从服务器上拉代码

    git pull 代码地址 本地分支
    git pull origin master
3.克隆远程仓库
    git clone git@innote.com:22/opt/git/test.git

    *远程登录不要密码,authorized_keys不生效的解决办法

    1.ssh目录的权限必须是700 //服务端

    2.ssh/authorized_keys文件权限必须600 //服务端

    任何人都可以使用http协议下载github的项目,但是如果要下载git的项目,需要有权限(可以是公钥,可以是密码)

    GIT下载在终端输入指令brew install git
1.Git常用命令
    git config --global user.name "your name" ---设置你的仓库用户名(用于标示提交者)

    git config --global user.email "email@example.com" ---设置你的仓库邮箱(用于标示提交者)

    Git init初始化一个git仓库

    git add --all ---添加所有更改的文件

    git add filename1 ---指定添加filename1

    git commit -m "commit message"---添加更改的信息,必须要有,不然报错,不建议不加

    git status ---查看git当前状态

    git diff filename1--查看filename1到底修改了哪些内容

    git log ---查看最近的提交日志

    git log --pretty=oneline ---单行显示提交日志

    git reset -hard commitID ---利用git log得到的commitID返回版本

    git reflog --查看命令的历史,可以找到git log看不到的commitID,因为git log只是显示当前提交日志,如果你提交了一次,退回版本后又反悔了,就能查看上次提交的commitID

    git checkout --filename1利用版本库中的版本替换工作区红的文件。

    功能有2:

    撤销文件修改,分两种情况:

    撤销工作区中的修改(没有使用git add命令添加到暂存区)

    撤销暂存区中的修改(添加到了暂存区又做了修改)

    再回删除的文件

    工作去中文件误删了,可以通过此命令从版本库中找回

    git reset HEAD fliename1撤销add,回到工作区

    git rm filename1删除文件

    git remote add origin https://github.com/pengloo53/learngit.git将版本地库关联到github远程库上

    git push -u origin master第一次推送的时候要加上-u参数,可以将本地库的master分支与远程库的master分支关联起来;下次提交就不需要加-u了。
2.分支管理
git show 查看当前版本与上次版本的文件改动
    git checkout long   ----切换分支
    git checkout -b long ---创建一个新的分支
    git branch          ----查看所在分支

    git add file        ----提交信息到暂存区
    git commit -m "提交记录"  
      git reset --hard HEAD^  ---退回到上一个版本^^是上上一个
    git reset --hard 3628164 ---退回某个指定的版本
git log --pretty=oneline   查看日志

忽略文件

可以在全局配置
vi  ~/.gitignore_global
*~
*.DS_Store
*.idea
或者直接在项目文件下
vi .gitignore
filename

冲突解决

首先,个人觉得冲突的原因是由于两次改动了文件内容不同导致的。比如我有两个版本,一个是master,一个是long,在master分支做了a b c文件,我在long分支下git pull同步了两者的代码,然后我在master A上修改了a b ,创建c 文件提交,在long上修改了b,会提示b文件有冲突。
此刻master改了a文件,创建了c文件,但是long并没有动,所以 git pull origin master之后, ac文件是正常的,
而不正常的b文件,会在我们pull的时候提示CONFLICT (content): Merge conflict in b
总之跟线上合并的原则就是,谁改了,就以谁的为准,如果同时改了,就会有冲突,所以不要害怕线上的会把本地的给覆盖掉

A.png
B.png

只要出现以下提示,就是冲突的文件

long:ceshi long$ git pull origin master
From git.oschina.net:long646/ceshi
 * branch            master     -> FETCH_HEAD
Auto-merging b
CONFLICT (content): Merge conflict in b
Automatic merge failed; fix conflicts and then commit the result.

git show 查看冲突区别
long:ceshi long$ git show
commit 50f474be11239d0d5ee716d5d9ecacf24fdbbfa7 (HEAD -> long)
Author: long <646448149@qq.com>
Date:   Thu Aug 31 12:26:29 2017 +0800

    long

diff --git a/b b/b
index e0b3f1b..8586b93 100644
--- a/b
+++ b/b
@@ -1 +1,2 @@
 bb
+22

git diff  版本号 版本号  可以查看两个版本下的区别

git服务器搭建
sudo apt-get install git //安装git
sudo adduser git  //添加git用户
git clone --bare my_project  my_project.git
sudo chown -R git:git my_project.git   //修改仓库的所属用户为git
    git checkout -b dev创建dev分支并切换到dev.相当于git branch dev、git checkout dev两条命令

    git branch查看当前分支

    git merge dev合并指定分支到当前分支,如,你现在在master分支,那么执行命令就将dev分支合并到了master分支上

    git branch -d dev删除dev分支

    git log --graph --pretty-oneline --addrev-commit查看分支合并图

    git merge --no-off-m "merge with no-ff" dev禁用[fastforward],也就是保留分支的相关信息。

    git stash将工作区现场储藏起来,等以后恢复后继续工作。通常用于处理更为着急的任务时,例如:bug.

    git stash list查看保存的工作现场

    git stash apply恢复工作现场

    git stash drop删除stash内容

    git stash pop恢复的同事直接删除stash内容

    git stash apply stash@{0}恢复指定的工作现场,当你保存了不只一份工作现场时

    Git rm –cached文件名不再追踪

    Git add文件名

    Git commit –m ‘记录名’

    Git commit –am “记录名”添加并提交Git log查看git日志

    Git checkout –b b1创建一个分支

    Git branch查看所在分支

    Git checkout master回到主分支

    Git merge分支名合并两个分支

    Git branch –d b2删除分支

    将文件名写入.gitignore文件中表示添加时忽略该文件

    git checkout –[提交的名字]可以回到之前的版本
vi编辑器
    vi命令模式插入模式编辑模式

    插入命令---a i o

    定位:-----set nu :n

    删除:-----x nx dd ndd

    复制和剪切--yy-p dd-p

    替换和恢复--r/R u

    搜索和替换--/关键词/ n :范围/要替换的关键词/替换为关键词/g或者c

    保存退出----:wq ZZ :q!

    使用和技巧

    :r /boot把boot目录下的信息导入当前指定的位置:r !date导入当前时间!which ls查找ls路径

    查看apache进程ps -ef |grep httpd

    vi ~/.vimrc

    1 syntax on#设置颜色

    2 set nu#设置行号

推荐阅读更多精彩内容