简介
Git[1]是 Linus 开源的分布式代码版本控制工具。
Q:版本控制工具有哪些?
A:
- 集中式:SVN、CVS、VSS 等
- 分布式:BitKeeper、Git 等
Q:集中式和分布式有什么区别?
A:集中式依赖中央仓库,而且每次上传都是完整版,不易溯源。分布式每个人手头上都是完整版,改动只需要把修改部分同步一下就行了。
Git 服务器有GitHub[2]、GitLab[3]、BitBucket[4]和Gitee[5]等。
Git 可视化工具有SourceTree[6]和SmartGit[7]等。
Git 常用命令
基础设置
user@Debian:~$ sudo apt install git # 安装
user@Debian:~$ git config --global user.name "name" # 设置信息。因为是分布式版本控制,所以需要有用户名和邮箱做标识
user@Debian:~$ git config --global user.email "user@email.com"
user@Debian:~$ ssh -T git@github.com # 测试Github的SSH连接
user@Debian:~/Project$ git init # 初始化Git项目
上传下载

user@Debian:~$ git clone https://github.com/user/Project.git # 克隆到本地
user@Debian:~/Project$ git remote rm origin # 删除已关联项目地址
user@Debian:~/Project$ git remote add origin git@github.com:user/Project.git # 关联项目地址
user@Debian:~/Project$ git remote set-url origin git@github.com:user/Project.git # 设置项目地址
user@Debian:~/Project$ git fetch https://github.com/user/Project.git # 从远程仓库拉取
user@Debian:~/Project$ git pull https://github.com/user/Project.git # 从远程仓库拉取并合并
user@Debian:~/Project$ git add . # 提交到暂存区
~user@Debian:~/Project$ git commit -am "Add files" # 提交到版本库;-a是添加所有改动代码,-m是添加描述
user@Debian:~/Project$ git status # 查看文件状态
user@Debian:~/Project$ git log # 查看历史;--oneline是以单行显示
user@Debian:~/Project$ git push -u origin main # 推送到远程仓库;-u是标识默认提交仓库和分支
分支管理
user@Debian:~/Project$ git branch # 查看分支
user@Debian:~/Project$ git branch develop # 创建分支
user@Debian:~/Project$ git checkout main # 切换分支
user@Debian:~/Project$ git branch -d develop # 删除分支
user@Debian:~/Project$ git diff main develop # 查看分支区别
user@Debian:~/Project$ git merge develop # 合并分支,保留commit历史
user@Debian:~/Project$ git rebase -i develop # 不保留commit历史,慎用
撤销改动
user@Debian:~/Project$ git stash # 将撤销代码暂存
user@Debian:~/Project$ git checkout develop && git stash pop # 释放暂存的代码到其他分支上去
user@Debian:~/Project$ git checkout develop && git cherry-pick 0d934b3 --no-commit # 嫁接改动到正确分支;--no-commit是不commit,只放暂存区,支持同时嫁接多个改动
user@Debian:~/Project$ git reflog # 恢复撤销
未提交到暂存区
即未add,撤回到上一次add或commit时的状态。
user@Debian:~/Project$ git checkout -- README.md # 撤销单个文件
user@Debian:~/Project$ git checkout . # 撤销全部改动
提交到了暂存区
即已经add,但未commit。
user@Debian:~/Project$ git rm --cached README.md # 放弃指定文件的暂存
user@Debian:~/Project$ git rm --cached -r . # 放弃全部文件的暂存
提交到了版本库
即已经commit,但未push到远程。
user@Debian:~/Project$ git reset HEAD^ # 撤销错误提交的commit到工作区
user@Debian:~/Project$ git reset --mixed HEAD~1 # 退回一次提交改动到工作区
user@Debian:~/Project$ git reset --soft HEAD~1 # 退回一次提交改动到暂存区
user@Debian:~/Project$ git reset --hard HEAD^ # 直接硬核回退到上一个commit
提交到了远程仓库
即已经push过了,只能用一次新commit去撤回一次提交。
user@Debian:~/Project$ git revert HEAD --no-edit # 直接硬核回退到上一个commit;--no-edit是直接使用默认Commit Messages
user@Debian:~/Project$ git revert HEAD --edit
user@Debian:~/Project$ git revert HEAD --no-commit # 撤销改动到暂存区
Git 常用操作
修改配置文件
user@Debian:~$ sudo vi ~/.ssh/config
# 别名
Host gitee
# 域名
Hostname gitee.com
# HTTP代理
# ProxyCommand connect -H localhost:10809 %h %p
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitee_rsa
Host github
Hostname github.com
# SOCKS代理
# ProxyCommand connect -S localhost:10808 %h %p
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_ed25519
自建 Git 服务器
user@Debian:~$ git init --bare Project.git # 服务器初始化
user@Debian:~$ chown -R root:root Project.git # 赋权
? Ask More...
[1]Git: https://git-scm.com/
[2]GitHub: https://github.com/
[3]GitLab: https://gitlab.com/
[4]BitBucket: https://bitbucket.org/
[5]Gitee: https://gitee.com/
[6]SourceTree: https://www.sourcetreeapp.com/
[7]SmartGit: https://www.syntevo.com/smartgit/
- END -版权声明:本文为weixin_35843830原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。