git常用命令

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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 push [pb] master # 推送到远程库pb的master分支
git push -f [pb] master # 强制推送到远程库pb的master分支
git pull [pb] master # 从远程库获取并合并到本地分支

# 当前版本库状态
git status -s
?? # 尚未添加到暂存区
_M # 工作区文件修改(_表示空格)
M_ # 暂存区文件修改
A_ # 新添加到暂存区
_D # 工作区文件删除
_R # 工作区文件重命名
git mv a.txt b.txt # 暂存区和工作区文件重命名(相当于以下三条命令)
mv a.txt b.txt
git rm a.txt
git add b.txt

# 查看提交历史
git log
git log -p # 显示每次提交的差异
git log -2 # 仅显示最近两次提交
git log --stat # 显示文件提交信息
git log --pretty= # 格式化显示信息
oneline # 单行显示
short
full
fuller
format:"%h - $an, %ar : %s"
%H # commit完整哈希值
%h # commit简短哈希值
%an # 作者名字
%ae # 作者邮箱
%ad # 作者修订日期
%ar # 作者修订日期,按多久之前显示
%cn # 提交者名字
%ce # 提交者邮箱
%cd # 提交者提交日期
%cr # 提交者提交日期,按多久之前显示
%s # 提交说明
git log --graph # 显示 ASCII 图形表示的分支合并历史
git log --since=2.weeks # 从什么日期(1.years1.days5.minutes 2019-01-12)
git log --until # 到什么日期
git log -S "aaa" # 查找某次提交记录添加或删除某些字符串的记录
git log [path] # 查看某个文件或文件夹的提交记录
git log --author= # 仅显示指定作者相关的提交

# 版本重置
git reset(设工作区为A,暂存区为B,分支为C)
git reset --soft [HEAD] # 移动分支HEAD到指定位置,不取消暂存(撤销commit命令),只修改C
git reset [HEAD] # 移动分支HEAD到指定位置,并取消暂存(撤销commit命令和add命令),修改B和C
git reset --hard [HEAD] # 移动分支HEAD到指定位置,取消暂存,并撤销本地文件的修改,修改ABC(不安全,可能会丢失版本)
git reset [file] # 取消某个文件暂存(与 git add 相反)
git reset [HEAD] [file] # 某个文件暂存区重置到指定位置,只修改B(相当于A先重置,再add到B,A再恢复)

git checkout -- [file] # 撤销文件修改
git reflog # 查找之前的记录

# 查看当前关联的远程库
git remote -v # 查看当前关联的远程库(cat .git/config)
git remote add [pb] [url] # 关联远程库,pb为远程 Git 仓库简写
git remote show [pb] # 查看某个远程库信息
git remote rename [opb] [npb] # 改名
git remote rm [pb] # 移除远程库

分支

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

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

  1. 合并分支(git merge test)
  2. 变基(提交历史可能会丢失)

    1
    2
    3
    4
    git checkout test
    git rebase master
    git checkout master
    git merge test
  3. 不同之处:合并分支的历史记录为并行的,变基的历史记录为串行的

  4. 注意:不要对在你的仓库外有副本的分支执行变基

git远程分支

  1. 当从远程库克隆时,会为你自动将其命名为 origin(git clone -o [test] [url],可以改为test),拉取它的所有数据,创建一个指向它的 master 分支的指针,并且在本地将其命名为 origin/master(跟踪分支)。
  2. Git 也会给你一个与 origin 的 master 分支在指向同一个地方的本地 master 分支。
  3. 本地提交的时候master指针移动,但是origin/master指针不会移动

    1
    2
    3
    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处
  4. git fetch origin: 获取本地没有的远程库origin数据,移动 origin/master 指针指向新的、更新后的位置

    1
    2
    3
    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处
  5. git merge origin/master: 合并到当前分支

  6. git checkout -b newBranch origin/master: 新建分支,并指向跟踪分支的位置(跟踪分支和分支不同的是只有一个指针,不含可编辑的副本)
  7. 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 # 启动服务
0%