git最常用命令(大全)

本文详尽地介绍了Git的各种常用命令,包括初始化、添加、提交、分支管理、远程操作、合并、补丁和错误恢复等。通过实例演示了如何在Git中创建、切换、合并分支,以及如何与远程仓库交互,如克隆、拉取和推送。此外,还涵盖了Git的高级操作,如变基、打补丁和解决冲突,以及GitLab的安装与配置。对于Git初学者和日常开发者来说,是一份实用的参考指南。
摘要由CSDN通过智能技术生成
git init                  # git初始化
git add 1.js              # 添加文件到暂存区
git add .                 # 添加当前文件夹的所有文件到暂存区
git commit -m "..."       # 提交到分支
git commit -a -m "..."    # 从工作区直接提交,跳过暂存区
git commit --amend        # 合并上次的提交,即如果提交内容少了,可以用此追加提交
git rm a.txt              # 从暂存区移除文件,并把工作区文件一并删除
git rm --cached a.txt     # 从暂存区移除文件,不删除本地文件
git clone [url]           # 克隆现有项目
git status -s
    1. ??       # 尚未添加到暂存区
    2. _M       # 工作区文件修改(_表示空格)
    3. M_       # 暂存区文件修改
    4. A_       # 新添加到暂存区
    5. _D       # 工作区文件删除
    6. _R       # 工作区文件重命名
git mv a.txt b.txt        # 暂存区和工作区文件重命名(相当于以下三条命令)
    1. mv a.txt b.txt
    2. git rm a.txt
    3. git add b.txt
git log       # 查看提交历史
    1. -p           # 显示每次提交的差异
    2. -2           # 仅显示最近两次提交
    3. --stat       # 显示文件提交信息
    4. --pretty=    # 格式化显示信息
        1. oneline      # 单行显示
        2. short
        3. full
        4. fuller
        5. format:"%h - $an, %ar : %s"
            1. %H       # commit完整哈希值
            2. %h       # commit简短哈希值
            3. %an      # 作者名字
            4. %ae      # 作者邮箱
            5. %ad      # 作者修订日期
            6. %ar      # 作者修订日期,按多久之前显示
            7. %cn      # 提交者名字
            8. %ce      # 提交者邮箱
            9. %cd      # 提交者提交日期
            10. %cr     # 提交者提交日期,按多久之前显示
            11. %s      # 提交说明
    5. --graph              # 显示 ASCII 图形表示的分支合并历史
    6. --since=2.weeks      # 从什么日期(1.years1.days5.minutes  2019-01-12)
    7. --until              # 到什么日期
    8. -S "aaa"             # 查找某次提交记录添加或删除某些字符串的记录
    9. [path]               # 查看某个文件或文件夹的提交记录
    10. --author=           # 仅显示指定作者相关的提交
git log --oneline --graph --decorate
git reset
    0. 设工作区为A,暂存区为B,分支为C
    1. git reset --soft [HEAD]              # 移动分支HEAD到指定位置,不取消暂存(撤销commit命令),只修改C
    2. git reset [HEAD]                     # 移动分支HEAD到指定位置,并取消暂存(撤销commit命令和add命令),修改B和C
    3. git reset --hard [HEAD]              # 移动分支HEAD到指定位置,取消暂存,并撤销本地文件的修改,修改ABC(不安全,可能会丢失版本)
    4. git reset [file]                     # 取消某个文件暂存(与 git add 相反)
    5. git reset [HEAD] [file]              # 某个文件暂存区重置到指定位置,只修改B(相当于A先重置,再add到B,A再恢复)
git checkout -- [file]            # 撤销文件修改
git reflog                        # 查找之前的记录
git remote
    1. git remote -v                    # 查看当前关联的远程库(cat .git/config)
    2. git remote add [pb] [url]        # 关联远程库,pb为远程 Git 仓库简写
    3. git remote show [pb]             # 查看某个远程库信息
    4. git remote rename [opb] [npb]    # 改名
    5. git remote rm [pb]               # 移除远程库
git revert -n [HEAD]                  # 只撤销某一步的修改,然后重新提交
git diff [<commit-id>] [file]                     # 比较某文件工作区与暂存区(或指定commit-id)差异
    1. --cached/staged [<commit-id>] [file]         # 比较某文件暂存区与版本库(或指定commit-id)差异
    2. HEAD [file]                                  # 比较某文件工作区与版本库差异
    3. git diff [<commit-id>] [<commit-id>] [file]  # 比较某文件两个commit-id之间的差异
    3. --stat                                       # 不显示详细信息,只显示有多少行被改动
git difftool -x "code --wait --diff" [HEAD] [file]    # 比较某个文件的某一次提交跟当前的版本差异,并用vscode显示区别
git stash
    1. git stash save "保存当前状态"     # 保存当前的进度状态
    2. git stash list                   # 显示保存进度列表
    3. git stash pop "[stash_id]"       # 恢复指定的进度到工作区,如果没有stash_id则使用最新的进度,会删除当前进度
    4. git stash apply "[stash_id]"     # 恢复指定的进度到工作区,如果没有stash_id则使用最新的进度,不会删除当前进度
    4. git stash drop "[stash_id]"      # 删除指定的进度到工作区,如果没有stash_id则使用最新的进度
    5. git stash clear                  # 删除所有存储的进度
git update-index
    1. git update-index --skip-worktree [file]                  # 忽略本地文件的修改
    2. git update-index --no-skip-worktree [file]               # 取消忽略本地文件的修改
    3. git ls-files -v                                          # 查看所有被忽略的文件
git cherry-pick
    1. git cherry-pick [HEAD]               # 把其他分支的某次提交复制到当前分支
    2. git cherry-pick [b]                  # 把某个分支的最后一次提交复制到当前分支
    3. git cherry-pick [HEAD] [HEAD]        # 多个提交
    4. git cherry-pick [HEAD1]..[HEAD3]     # HEAD1到HEAD3,不包括HEAD1
    4. git cherry-pick [HEAD1]^..[HEAD3]    # HEAD1到HEAD3,包括HEAD1

分支

1
2
3
4
5
6
7
8
9
10
11
12
git branch                # 查看当前分支
    1. [b]                  # 创建分支
    2. -d [b]               # 删除分支(未合并的分支会删除失败)
    3. -D [b]               # 强制删除分支
    4. -v                   # 查看每个分支的最后一次提交
    5. --merged             # 查看哪些分支已经合并到当前分支
    6. --no-merged          # 查看所有包含未合并工作的分支
git checkout
    1. [b]                  # 切换分支
    2. -b [b]               # 创建并切换分支
git merge [b]             # 合并某分支到当前分支
git checkout -b 本地分支名 origin/远程分支名          # 从远程分支拉取本地没有的分支

补丁

1
2
3
4
5
6
git format-patch [HEAD] -1                # 某次提交
git format-patch [HEAD] [HEAD]            # 某两次提交之间的所有patch
git diff [HEAD] [HEAD] > [file.diff]      # 生成diff文件
git apply --check [file.patch|diff]       # 检查能否打补丁
git apply [file.patch|diff]               # 打补丁
git am [file.patch|diff]                  # 打补丁

整合分支的修改(合并test分支到master)

1
2
3
4
5
6
7
8
1. 合并分支(git merge test)
2. 变基(提交历史可能会丢失)
    1. git checkout test
    2. git rebase master
    3. git checkout master
    4. git merge test
3. 不同之处:合并分支的历史记录为并行的,变基的历史记录为串行的
4. 注意:不要对在你的仓库外有副本的分支执行变基

git远程分支

1
2
3
4
5
6
7
8
9
10
11
12
13
当从远程库克隆时,会为你自动将其命名为 origin(git clone -o [test] [url],可以改为test),拉取它的所有数据,创建一个指向它的 master 分支的指针,并且在本地将其命名为 origin/master(跟踪分支)。
Git 也会给你一个与 origin 的 master 分支在指向同一个地方的本地 master 分支。
本地提交的时候master指针移动,但是origin/master指针不会移动
    > a=>b=>c=>d=>e           # 远程分支,本地在c处克隆,远程继续提交d和e,远程master指向e处</br>
    > a=>b=>c                 # 本地origin/master指向c处,只要不与服务器连接,指针不移动</br>
    > a=>b=>c=>f=>g           # 本地master分支初始指向c处,继续提交f和g,master指向g处
git fetch origin: 获取本地没有的远程库origin数据,移动 origin/master 指针指向新的、更新后的位置
    > a=>b=>c=>d=>e           # 远程分支,本地在c处克隆,远程继续提交d和e,远程master指向e处</br>
    > a=>b=>c=>d=>e           # 本地origin/master指针移动到远程origin最新处,指向e</br>
    > a=>b=>c=>f=>g           # 本地master分支初始指向c处,继续提交f和g,master指向g处
git merge origin/master: 合并到当前分支
git checkout -b newBranch origin/master: 新建分支,并指向跟踪分支的位置(跟踪分支和分支不同的是只有一个指针,不含可编辑的副本)
git push origin --delete master: 删除远程分支

git配置自定义服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
useradd git                  # 管理员创建用户
passwd git                   # 设置git用户密码
su git                       # 切换git用户
mkdir .ssh                   
chmod 700 .ssh
cd .ssh
touch authorized_keys        # 创建保存公钥的文件
chmod 600 authorized_keys
vi authorized_keys           # 把公钥写进文件(如果用户的公钥不在文件中,则每次需要输入登录密码)
cd /home/git                # 回到主目录
git init --bare test.git    # 新建空仓库
本地测试
git remote add local git@ip:/home/git/test.git  # 关联远程库
git push local master       # 本地推送

GitWeb

1
2
3
yum install git-instaweb     # 安装
git instaweb -p 3000         # 修改监听端口(先进入仓库所在目录)
git instaweb --start         # 启动服务

GitLab

基本命令

1
2
3
4
5
6
7
gitlab-ctl reconfigure        // 重启配置,并启动gitlab服务
gitlab-ctl start              // 启动所有
gitlab-ctl restart            // 重新启动GitLab
gitlab-ctl stop               // 停止所有
gitlab-ctl status             // 查看服务状态
gitlab-ctl tail               // 查看Gitlab日志
vim /etc/gitlab/gitlab.rb     // 修改默认的配置文件

centos7安装

1
2
3
4
5
6
7
8
9
10
11
yum install -y curl policycoreutils-python openssh-server    // 防火墙中打开HTTP,HTTPS和SSH访问
systemctl enable sshd
systemctl start sshd
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
systemctl reload firewalld
yum install postfix                                          // 邮件服务
systemctl enable postfix
systemctl start postfix
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash    // 下载速度慢,可以先下载安装包,用rpm -ivh安装
EXTERNAL_URL="https://gitlab.example.com" yum install -y gitlab-ee

gitlab安装

1
2
3
4
5
6
7
8
9
docker pull gitlab-ce                 // 获取镜像
docker volume create gitlab-etc
docker volume create gitlab-log
docker volume create gitlab-data
docker run -d --hostname localhost -p 3001:80 -p 3002:443 --name gitlab --restart unless-stopped --volume gitlab-etc:/etc/gitlab --volume gitlab-log:/var/log/gitlab --volume gitlab-data:/var/opt/gitlab gitlab/gitlab-ce:latest
docker ps
docker exec -it gitlab /bin/bash      // 进入容器
vi /etc/docker/gitlab.rb              // 修改配置文件
docker restart gitlab                 // 重启服务

邮件配置

修改配置文件/etc/gitlab/gitlab.rb

1
2
3
4
5
6
7
8
9
10
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "******@qq.com"
gitlab_rails['smtp_password'] = "授权码"
gitlab_rails['smtp_domain'] = "smtp.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = '******@qq.com'

gitlab-rails console // 进入控制台

1. Notify.test_email('收件人邮箱', 'title', 'body').deliver_now     // 发送邮件测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值