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
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 一些操作
查看最后一次提交了什么内容
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 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, 强制推送一次