Git 自定义常用配置

Git 自定义常用配置

git 自用配置 定义了一些常用的git简写命令

  1[push]
  2    default = current
  3    autoSetupRemote = true
  4[core]
  5    safecrlf = false
  6    trustctime = false
  7    editor = vim
  8    filemode = false
  9    autocrlf = input
 10    quotepath = false
 11    whitespace = cr-at-eol
 12    ignorecase = false
 13
 14[color]
 15    ui = true
 16    status = auto
 17    diff = auto
 18    branch = auto
 19    interactive = auto
 20[merge]
 21    tool = vimdiff
 22[mergetool]
 23    keeptemporaries = false
 24    keepbackups = false
 25    prompt = false
 26    trustexitcode = false
 27[alias]
 28    # 完全删除最后一次提交
 29    rh = reset --hard HEAD^
 30    # 从 本地仓库 中, 撤销 最后一次提交, 将 最后的提交内容 作为 索引目录 中的 改动 (撤销了 commit 操作)
 31    rs = reset --soft HEAD^
 32    # 从 本地仓库 中, 撤销 最后一次提交, 将 最后的提交内容 作为 工作目录 中的 改动 (撤销了 commit 和 add 操作)
 33    rm = reset --mixed HEAD^
 34    # 从 索引目录 中, 撤回 指定文件 到 工作目录, 保留 文件改动 (撤销了 add 操作)
 35    ua = restore --staged 
 36    # 放弃 工作目录 中 指定文件 的更改, 接 指定文件名称
 37    re = restore 
 38    ue = restore 
 39    #-----------------------------------------------------------------------------------------------------------
 40    # 列表所有提交变更文件,增删情况
 41    ls = log --stat
 42    # 展示指定节点的详细变更信息
 43    sw = show
 44    last = log -1 --stat
 45    cp = cherry-pick
 46    ci = commit
 47    st = status
 48    unstage = reset HEAD --
 49    # 检出
 50    co = checkout
 51    # 新建分支
 52    cb = checkout -b
 53    # 提交并添加提交信息
 54    cm = commit -m
 55    # 提交文件并提交信息
 56    ca = commit -a -m
 57    # 修改最后一次提交, 可以修改提交消息, 修改提交文件, 并替换掉最后提交的CommitID
 58    cd = commit --amend
 59    # 清除没有被跟踪的文件和目录
 60    cf = clean -fd
 61    df = diff
 62    ds = diff --staged
 63    dc = diff --cached 
 64    dh = diff HEAD 
 65    br = branch
 66    bd = branch -d
 67    bD = branch -D
 68    pl = pull
 69    ps = push
 70    cl = clone
 71    lg = log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative -25
 72    lst = log -15 --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=short --stat
 73    ra = remote add
 74    mn = merge --no-ff 
 75    ms = merge --squash 
 76    pr = pull --rebase
 77    ff = fetch 
 78    rb = rebase 
 79    # 临时缓存未提交的修改
 80    sh = stash 
 81    # 临时缓存未提交的修改, 可以写简短说明
 82    sm = stash -m 
 83    # 弹出最后一次临时保存的未提交代码
 84    sp = stash pop 
 85    # 列表所有保存的未提交修改
 86    sl = stash list
 87
 88[http]
 89    sslVerify = true
 90    postbuffer = 524288000
 91[gui]
 92    encoding = utf-8
 93[pull]
 94    ff = only
 95[format]
 96    pretty = oneline
 97[credential]
 98    helper = store
 99    autoDetectTimeout = -1
100[https]
101    postBuffer = 1048576000
102[pack]
103    windowMemory = 50m
104[http "https://github.com"]
105    proxy = socks5://127.0.0.1:1081

Gitea 二进制版本 安装配置

使用Gitea的二进制版本在Linux上搭建自己的git服务器

关于Gitea

Gitea 是一个自己托管的Git服务程序。他和GitHub, Bitbucket or Gitlab等比较类似。他是从 Gogs 发展而来

Gitea的首要目标是创建一个极易安装,运行非常快速,安装和使用体验良好的自建 Git 服务。 采用Go作为后端语言,只生成一个可执行程序即可。

并且他还支持跨平台,支持 Linux, macOS 和 Windows 以及各种架构,除了x86,amd64,还包括 ARM 和 PowerPC。

准备工作

 1
 2# .bashrc 中 配置环境变量
 3export GITEA_WORK_DIR=/var/lib/gitea/
 4
 5
 6# 建立执行用户
 7groupadd --system git
 8useradd \
 9   --system \
10   --shell /bin/bash \
11   --comment 'Git Version Control' \
12   --gid git \
13   --home-dir /home/git \
14   --create-home \
15   git
16
17# 建立工作路径
18mkdir -p /var/lib/gitea/{custom,data,log}
19chown -R git:git /var/lib/gitea/
20chmod -R 750 /var/lib/gitea/
21mkdir /etc/gitea
22chown root:git /etc/gitea
23chmod 770 /etc/gitea

gitea 二进制版本安装

1
2wget -O gitea https://dl.gitea.com/gitea/1.20.3/gitea-1.20.3-linux-amd64
3chmod +x gitea
4cp gitea /usr/local/bin/gitea
5
6
7# 首次运行
8su -l git
9GITEA_WORK_DIR=/var/lib/gitea/ /usr/local/bin/gitea web -c /etc/gitea/app.ini

Gitea 服务配置文件

1sudo vim /etc/systemd/system/gitea.service
 1[Unit]
 2Description=Gitea (Git with a cup of tea)
 3After=syslog.target
 4After=network.target
 5
 6[Service]
 7# Uncomment the next line if you have repos with lots of files and get a HTTP 500 error because of that
 8# LimitNOFILE=524288:524288
 9RestartSec=2s
10Type=notify
11User=git
12Group=git
13WorkingDirectory=/var/lib/gitea/
14# If using Unix socket: tells systemd to create the /run/gitea folder, which will contain the gitea.sock file
15# (manually creating /run/gitea doesn't work, because it would not persist across reboots)
16#RuntimeDirectory=gitea
17ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
18Restart=always
19Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
20WatchdogSec=30s
21
22[Install]
23WantedBy=multi-user.target
1sudo systemctl enable gitea
2sudo systemctl start gitea

Git 一些操作

Git 一些操作

Git 一些操作

查看最后一次提交了什么内容

1git show

重新未推送的最后一次提交的信息

1git commit --amend --only -m "new message"

删除提交中的一个文件

1git checkout HEAD^ filename
2git add -A
3git commit --amend

取消最后一次提交

1# 如果没有推送, 使用一下命令, 可以保留撤销的提交变化内容
2git reset --soft HEAD@{1}
3# 如果已推送
4git revert HEAD^
5git push

追加暂存的内容到上一次提交上

1git commit --amend

删除分支

1# 本地分支
2git branch -D/-d branch-name
3# 远程分支
4git push origin :branch-name

git删除文件,保留实体文件

1git rm --cached filename

Git 常用操作

Git 常用操作

远程仓库 操作命令

检出仓库: $ git clone git://github.com/origin_name/origin_name.git
查看远程仓库: $ git remote -v
添加远程仓库: $ git remote add origin_name remote_url
删除远程仓库: $ git remote rm origin_name
修改远程仓库: $ git remote set-url --push origin_name new_remote_url
拉取远程仓库: $ git pull remote_name local_name
推送远程仓库: $ git push remote_name local_name

分支 操作命令

查看本地分支: $ git branch
查看远程分支: $ git branch -r
创建本地分支: $ git branch name

注意新分支创建后不会自动切换为当前分支

切换分支: $ git checkout name
创建新分支并立即切换到新分支: $ git checkout -b name
删除分支: $ git branch -d name

-d选项只能删除已经参与了合并的分支, 对于未有合并的分支是无法删除的。
如果想强制删除一个分支, 可以使用-D选项

合并分支: $ git merge name

将名称为name的分支与当前分支合并

创建远程分支(本地分支push到远程): $ git push origin name
删除远程分支: $ git push origin :heads/name

我从master分支创建了一个own_br分支, 做了一些修改后, 使用git push origin master提交,
但是显示的结果却是Everything up-to-date, 发生问题的原因是git push origin master
在没有track远程分支的本地分支中默认提交的master分支, 因为master分支默认指向了origin master 分支,
这里要使用git push origin own_br:master 就可以把own_br推送到远程的master分支了。

如果想把本地的某个分支test提交到远程仓库, 并作为远程仓库的master分支,
或者作为另外一个名叫test的分支, 那么可以这么做。
$ git push origin test:master
提交本地test分支作为远程的master分支
好像只写这一句, 远程的github就会自动创建一个test分支

$ git push origin test:test
提交本地test分支作为远程的test分支

如果想删除远程的分支呢?类似于上面, 如果:左边的分支为空, 那么将删除:右边的远程的分支。

$ git push origin :test
刚提交到远程的test将被删除, 但是本地还会保存的, 不用担心

克隆远程指定分支

1git init
2git remote add -t br_name_local -f origin remote_origin_url
3git checkout br_name_local

Git 四种撤销操作

Git 4个区: 工作区, 暂存区, 本地仓库, 远程仓库
对应5个状态: 未修改, 已修改, 已暂存, 已提交, 已推送

干净工作区, 新建文件, 处于未跟踪untracked状态

  • 可以删除未跟踪文件, 还原工作区干净状态
  • 可以通过 git add filename 加入git暂存区

干净工作区, 修改文件, 处于已修改状态

  • 可以通过 git checkout -- filename, 撤销修改, 还原干净工作区
  • 可以通过 git add filename, 将修改加入git暂存区

所有通过 git add . 到暂存区的文件

  • 可以通过 git reset ., 撤销add,回复到原修改,新增状态

  • 可以通过 git reset filename, 撤销add,回复到原修改,新增状态

  • 可以通过 git reset HEAD ., 回复到原修改,新增状态

  • 同上的命令 git reset HEAD filename, 撤销暂存区的文件到原状态

  • 可以通过 git commit -m "commit info" , 提交暂存区文件到本地仓库

  • 可以通过 git reset --hard (.|filename), 撤销add操作和修改/新增操作,
    彻底还原干净工作区

上面的命令等于以下两条命令:
git reset (.|filename) 撤销提交到缓存区, 这样缓存区就干净了
git checkout -- (.|filename) 撤销文件的修改, 这样工作区就干净了

对于最后一次commit, 可以通过 git commit --amend 打开最后提交信息修改

对于提交到本地仓库的代码

  • 可以通过 git reset --hard HEAD^, 回退版本到上一个版本

  • 可以通过 git reset --hard 59b1707, 返回到指定的提交版本
    通过 git reflog 查看所有提交 版本信息

  • 回退版本后, 如果再次后悔, 通过git reflog, 找到指定版本id, git reset --hard xxxxx

  • 可以通过 git reset --hard origin/master, 利用远程的版本库,覆盖本地最后一次提交

  • 可以通过 git push origin master , 推送本地版本到远程仓库

如果提交到远程仓库后, 后悔了

  • 可以通过 git reset --hard HEAD^ , 回退本地版本库到上一个版本
    再运行 git push -f, 强制推送一次