git常用命令

两个流程图

常用命令流程图:

img

工作流程图

img

workspace: 本地的工作目录。(记作A)
index/stage暂存区域,临时保存本地改动。 (记作B)
local repository: 本地仓库,只想最后一次提交HEAD。(记作C)
remote repository:远程仓库。(记作D)

命令

初始化

1
2
3
4
git init //创建
git clone /path/to/repository //检出
git config --global user.email "you@example.com" //配置email
git config --global user.name "Name" //配置用户名

操作

1
2
3
4
5
6
7
8
9
10
11
git add <file> // 文件添加,A → B
git add . // 所有文件添加,A → B
git commit -m "代码提交信息" //文件提交,B → C
git commit --amend //与上次commit合并, *B → C
git push origin master //推送至master分支, C → D
git pull //更新本地仓库至最新改动, D → A
git fetch //抓取远程仓库更新, D → C
git log //查看提交记录
git status //查看修改状态
git diff//查看详细修改内容
git show//显示某次提交的内容

撤销操作

1
2
3
4
5
6
git reset <file>//某个文件索引会回滚到最后一次提交, C → B
git reset//索引会回滚到最后一次提交, C → B
git reset --hard // 索引会回滚到最后一次提交, C → B → A
git checkout // 从index复制到workspace, B → A
git checkout -- files // 文件从index复制到workspace, B → A
git checkout HEAD -- files // 文件从local repository复制到workspace, C → A

分支相关

1
2
3
4
5
6
git checkout -b branch_name //创建名叫“branch_name”的分支,并切换过去
git checkout master //切换回主分支
git branch -d branch_name // 删除名叫“branch_name”的分支
git push origin branch_name //推送分支到远端仓库
git merge branch_name // 合并分支branch_name到当前分支(如master)
git rebase //衍合,线性化的自动, D → A

冲突处理

1
2
3
4
git diff //对比workspace与index
git diff HEAD //对于workspace与最后一次commit
git diff <source_branch> <target_branch> //对比差异
git add <filename> //修改完冲突,需要add以标记合并成功

其他

1
2
3
4
gitk //开灯图形化git
git config color.ui true //彩色的 git 输出
git config format.pretty oneline //显示历史记录时,每个提交的信息只显示一行
git add -i //交互式添加文件到暂存区

搭建服务端(使用Gogs)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#安装git
sudo apt-get install git
yum install git
#创建一个git用户,用来运行git服务
sudo adduser git
#创建证书使用公钥免密码登录(可选)
ssh-keygen -t rsa
vi ~/.ssh/authorized_keys
#初始化Git仓库
sudo git init --bare sample.git
sudo chown -R git:git sample.git
#禁用shell登录
vi /etc/passwd
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
#在客户端上克隆远程仓库
git clone git@server:/srv/sample.git
坚持原创技术分享,您的支持将鼓励我继续创作!