Git 简明教程


简介

使用

命令概览

初始化操作
    $ git config --global user.name <name> #设置提交者名字
    $ git config --global user.email <email> #设置提交者邮箱
    $ git config --global core.editor <editor> #设置默认文本编辑器
    $ git config --global merge.tool <tool> #设置解决合并冲突时差异分析工具
    $ git config -list #检查已有的配置信息
创建新版本库
    $ git clone <url> #克隆远程版本库
    $ git init #初始化本地版本库
修改和提交
    $ git add . #添加所有改动过的文件
    $ git add <file> #添加指定的文件
    $ git mv <old> <new> #文件重命名
    $ git rm <file> #删除文件
    $ git rm -cached <file> #停止跟踪文件但不删除
    $ git commit -m <file> #提交指定文件
    $ git commit -m “commit message” #提交所有更新过的文件
    $ git commit -amend #修改最后一次提交
    $ git commit -C HEAD -a -amend #增补提交(不会产生新的提交历史纪录)
查看提交历史
    $ git log #查看提交历史
    $ git log -p <file> #查看指定文件的提交历史
    $ git blame <file> #以列表方式查看指定文件的提交历史
    $ gitk #查看当前分支历史纪录
    $ gitk <branch> #查看某分支历史纪录
    $ gitk --all #查看所有分支历史纪录
    $ git branch -v #每个分支最后的提交
    $ git status #查看当前状态
    $ git diff #查看变更内容
撤消操作
    $ git reset -hard HEAD #撤消工作目录中所有未提交文件的修改内容
    $ git checkout HEAD <file1> <file2> #撤消指定的未提交文件的修改内容
    $ git checkout HEAD. #撤消所有文件
    $ git revert <commit> #撤消指定的提交
分支与标签
    $ git branch #显示所有本地分支
    $ git checkout <branch/tagname> #切换到指定分支或标签
    $ git branch <new-branch> #创建新分支
    $ git branch -d <branch> #删除本地分支
    $ git tag #列出所有本地标签
    $ git tag <tagname> #基于最新提交创建标签
    $ git tag -d <tagname> #删除标签
合并与衍合
    $ git merge <branch> #合并指定分支到当前分支
    $ git rebase <branch> #衍合指定分支到当前分支
远程操作
    $ git remote -v #查看远程版本库信息
    $ git remote show <remote> #查看指定远程版本库信息
    $ git remote add <remote> <url> #添加远程版本库
    $ git fetch <remote> #从远程库获取代码
    $ git pull <remote> <branch> #下载代码及快速合并
    $ git push <remote> <branch> #上传代码及快速合并
    $ git push <remote> : <branch>/<tagname> #删除远程分支或标签
    $ git push -tags #上传所有标签

自定义快捷命令

alias gcommit='func() { git commit -m $1;}; func'
alias gpush='git push -u origin master'
alias gadd='git add -A'
# for my git server
alias gitclone='func() { git clone git@lab.ink:/home/git/repositories/$1;}; func'
#alias gitclone='func() { git clone git@$LABIP:/home/git/repositories/$1;}; func'
alias gitadd='func() { sudo /home/liu/sfw/zhi/gitadd.sh $1;}; func'
alias upd='func() { sudo /home/liu/sfw/zhi/updatedomain.sh $1;}; func'


# for git
alias gcommit='git commit -m'
alias gpush='func() { git push -u origin $1;}; func'
alias gpushm='git push -u origin master'
alias gpushp='git push -u origin gh-pages'
alias gadd='git add -A'
alias gstatus='git status'

子模块

自动下载

如果你在克隆含有子模块的库时, 没有使用 git clone --recursive xxx , 那么不要急, 可以这样把子模块克隆进去

cd [project]
git submodule init
git submodule update

搭建Git服务器

参考示例

安装配置SSH服务端客户端

  1. 安装SSH: sudo apt-get install openssh-server openssh-client
  2. 配置SSH服务端(可选, 默认配置下需要输入密码): sudo gedit /etc/ssh/sshd_config --> StrictModes no , RSAAuthentication yes (使用纯的RSA认证), PubkeyAuthentication yes (允许Public Key) , AuthorizedKeysFile %h/.ssh/authorized_keys (公钥存储路径).
  3. 重启SSH服务: sudo /etc/init.d/ssh restartsudo service ssh restart

安装配置Git服务端客户端

Git服务端配置

  1. 安装服务端: sudo apt-get install git git-core
  2. 新建用户用于git : sudo adduser git (或 sudo useradd -m gitsudo passwd git)
  3. 将git设为管理员(可选): sudo gedit /etc/sudoers --> 添加 git ALL=(ALL:ALL) ALL
  4. 新建仓库目录并更改权限:
     cd /home/git
     sudo mkdir repositories
     sudo chown git:git /home/git/repositories # 设定所有者
     sudo chmod 755 /home/git/repositories # 设置仓库访问权限
     cd repositories
     sudo git init --bare sample.git # 创建 sample 库
     sudo chown -R git:git sample.git # 更改 sample 权限
    

提示:

出于安全考虑,可以限制git用户通过ssh使用git,但无法登录shell。 打开编辑 /etc/passwd 文件并找到 类似 下面的一行(自行创建的用户名):

git:x:1001:1001:,,,:/home/git:/bin/bash

改为:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

Git客户端配置

  1. 安装Git客户端(Windows,或Linux)

  2. 生成免密登录的秘钥(可选): 打开 gitbash (Windows) 或终端 (linux), 输入以下指令生成秘钥

    ssh-keygen -t rsa
    

    生成的秘钥一般在 C:/Users/yourname/.ssh/id_rsa.pub (Windows), ~/.ssh/id_rsa.pub (Linux) 文件中.

  3. 秘钥上传到服务器: 方法1 --> 在/home/git/ 下 新建 .ssh/authorized_keys 文件 (如果没有), 复制上述生成的秘钥内容, 粘贴到 authorized_keys 中保存. 方法2 --> 客户端gitbash终端执行: ssh-copy-id git@yourhost

  4. 克隆服务端的仓库:

    git clone git@yourhost:/home/git/repositories/samples.git
    
  5. 提交到服务端:

    git push -u orig master
    

按上述步骤配置完即可

简化命令

自定义域名

通过修改 host 文件实现:

  • Windows: C:/Windows/System32/drivers/etc/hosts
  • Ubuntu : /etc/hosts

打开文件,添加域名解析条目即可:

# server at lab
# IP domain
xxx.xxx.xxx.xxx lab.ink

克隆

采用 alias 实现命令的简化:

Windows与Linux命令相同, 只不过目录不一样:

  • Linux下在 ~/.bashrc
  • Windows下在 C:\Users\yourusername/.bashrc 里,如果没有,gitbash 终端执行 : touch .bashrc 即可

打开该文件,并输入:

alias gitclone='func() { git clone git@lab.ink:/home/git/$1;}; func'

重启终端,以后可以通过执行如下命令进行克隆:

# gitclone your_git_repository_name
gitclone sample

错误解决

Clone过程

clone 时提示如下错误

gitclone sample
Cloning into 'sample'...
ssh: connect to host lab.ink port 33: Connection timed out
fatal: Could not read from remote repository.

通过将端口 33 改为 22 即可。 sudo gedit /etc/ssh/ssh_config 找到 Port 修改即可。

提示:

  • SSH服务端配置: sudo gedit /etc/ssh/sshd_config
  • SSH客户端配置: sudo gedit /etc/ssh/ssh_config

SSH秘钥

明明添加了秘钥,却提示:

sign_and_send_pubkey: signing failed: agent refused operation

解决办法:

eval "$(ssh-agent -s)"
ssh-add
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值