文章目录
简介
使用
命令概览
初始化操作
$ 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服务端客户端
- 安装SSH:
sudo apt-get install openssh-server openssh-client
- 配置SSH服务端(可选, 默认配置下需要输入密码):
sudo gedit /etc/ssh/sshd_config
-->StrictModes no
,RSAAuthentication yes
(使用纯的RSA认证),PubkeyAuthentication yes
(允许Public Key) ,AuthorizedKeysFile %h/.ssh/authorized_keys
(公钥存储路径). - 重启SSH服务:
sudo /etc/init.d/ssh restart
或sudo service ssh restart
安装配置Git服务端客户端
Git服务端配置
- 安装服务端:
sudo apt-get install git git-core
- 新建用户用于git :
sudo adduser git
(或sudo useradd -m git
,sudo passwd git
) - 将git设为管理员(可选):
sudo gedit /etc/sudoers
--> 添加git ALL=(ALL:ALL) ALL
- 新建仓库目录并更改权限:
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客户端配置
-
安装Git客户端(Windows,或Linux)
-
生成免密登录的秘钥(可选): 打开
gitbash
(Windows) 或终端 (linux), 输入以下指令生成秘钥ssh-keygen -t rsa
生成的秘钥一般在
C:/Users/yourname/.ssh/id_rsa.pub
(Windows),~/.ssh/id_rsa.pub
(Linux) 文件中. -
秘钥上传到服务器: 方法1 --> 在
/home/git/
下 新建.ssh/authorized_keys
文件 (如果没有), 复制上述生成的秘钥内容, 粘贴到 authorized_keys 中保存. 方法2 --> 客户端gitbash终端执行:ssh-copy-id git@yourhost
-
克隆服务端的仓库:
git clone git@yourhost:/home/git/repositories/samples.git
-
提交到服务端:
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