咳咳,有如此完美的可视化界面不用,偏偏要用命令行,何必呢!命令行这东西,按需获取,当你遇到需要完成的操作无从下手时,可以过来看看,没必要全部记下来。

老司机专属链接:Git 常用命令列表

零基础:仓库初长成

Scene1: 我是项目的创建者,在git上已经创建了一个新的仓库,我要怎么推送本地代码到远端仓库?
1
2
3
4
5
1. git init // 在项目的根目录执行,初始化本地仓库

2. git remote add [rmt_name] [git_url] // 构建远程仓库连接

3. git push [rmt_name] master // 将本地代码推送到远端的master分支
Scene2: 我是项目的参与者,git上已经有了代码仓库,我要怎么参与开发?
1
git clone [git_url]   // 复制远程仓库到本地

入门:贡献自己一份力

Scene1: 我对本地仓库进行了修改,我要怎么提交到远端仓库?
1
2
3
4
5
6
7
8
9
1. git status   // 查看哪些文件被修改了,发现所有的文件修改都是你所希望的

2. git add . // 将所有的文件修改都添加到暂存区

3. git commit -m "本次提交的信息" // 将暂存区的内容提交到本地仓库

4. git pull [origin] [branch_name] // 拉取并合并远端的仓库,发现没有任何冲突,太开心了

5. git push [origin] [branch_name] // 将本地仓库提交到远端仓库
Scene2: 我想撤销对某些文件的修改(还没有add)
1
2
3
4
5
6
7
1. git status // 查看哪些文件被修改了,发现有些文件不应该被修改

2. git checkout [file_name] // 撤销对原有文件的修改,如果有多个文件,重复执行此操作

// 2. 如果想撤销所有修改,git checkout .

3. git clean -df // 恢复新增的或删除的文件
Scene3: 我想撤回add操作(已经add但是还没commit)
1
git reset    // 把add的文件全部从暂存区取出来,如果只想取出单个文件,后面可以跟文件名
Scene4: 我想撤回commit操作(已经commit但是还没有进行push)
1
2
3
1. git log      // 查看所有的提交日志,复制上一次commit的commit_id

2. git reset --soft [commit_id] // 撤销此次commit并保留所有的修改
Scene5: 我进行了commit操作,但是我发现我的标签写错了,怎么办?
1
2
3
1. git commit --amend  // 执行后编辑信息保存即可(你可能需要一些简单的vim知识)

2. git commit --amend --reset-author // 修改上一次提交的作者信息
Scene6: 我想回滚到之前的某一个版本
1
2
3
4
5
6
7
8
1. git log // 查看提交日志,复制你想要回滚到的那一次提交的commit_id

// 注意:此次回滚为强制回滚,这之后的所有修改都不会被保存
// 如果你后悔了,只需要到远端仓库中复制当前head的commit_id再执行一遍此操作即可
2. git reset --hard [commit_id]

// 此操作红色报警,不到万不得已千万不要用!!!
3. git push -f [rmt_name] [branch_name] // 强制覆盖远端仓库,即进行远端仓库的回滚,此操作不可逆
Scene7: 最不想看到的结果,pull或者merge的时候发生冲突了
1
2
3
4
5
6
7
1. 根据合并结果对所有的冲突进行手动处理

2. git add .

3. git commit -m "合并信息" // 重新提交一遍

4. git push [rmt_name] [branch_name]
Scene8: 想查看某个文件具体的修改内容?
1
git diff [file_name] // 对比该文件修改前后的区别,如果无文件名将对比所有文件的修改
Scene9:我想查看所有的提交记录
1
2
3
4
5
1. git log      // 查看所有的提交记录

2. git log [branch_name] // 查看某分支的提交记录

3. glog // 等价于 git log --oneline,简化日志,一次提交占一行,有利于全局观察

进阶:花里胡哨的一份力

Scene1: 我要新建一个分支
1
2
3
4
5
1. git branch [new_branch_name]       // 创建一个新的分支

2. git checkout [new_branch_name] // 如果需要切换到新分支请执行此命令

// 上面两个步骤可以合并为 git checkout -b [branch_name]
Scene2: 我要查看现有的所有分支
1
git branch  // 查看分支
Scene3: 分支开发完了,我要合并到主分支master上
1
2
3
4
5
1. git checkout master  // 切换到master

2. git merge [branch_name] // 合并分支到master,如果有冲突,你懂的

3. git merge --patch [branch_name] [file_name] // 只合并单个文件到master上,比较少用
Scene4: 分支开发完了,也就没有存在的必要了
1
2
3
1. git branch -d [branch_name]    // 删除本地分支, -d会判断是否合并,-D会强制删除

2. git push rmt --delete [branch_name] // 删除远程仓库的分支

大师:优化提交记录 - rebase

  • 超高能警报!!虽然rebase可以简化提交记录,如果你用的是 Source Tree 等可视化工具,那么点一下就可以了,如果是用的命令行,请在熟练使用过 rebase 命令的高手陪伴下使用该命令!!!否则!!!后果你承担不起!!!

普通的提交最大的问题,就是有太多的 commit,当参与人数较多时,会出现大量的如merge这种无用的commit日志,而且在查看提交记录图时,会有很多从分支上合并到主分支的线条,看起来不美观。

1
2
3
4
5
6
7
8
9
// 下面的流程会把本地的commit一一粘贴到master上,而不是merge
// 2、3步骤可以合并为 git pull -rebase orgin master
1. git commit -m ''

2. git fetch orgin/master

3. git rebase orgin/master

4. git push orgin master

无卵用:不常用但是一定会用到的命令

Scene1: 管理现有的仓库链接
1
2
3
4
5
1. git remote   // 查看现有的远程仓库链接名

2. git remote -v // 相比于上一条多了url信息,更加详细

3. git remote rm [rmt_name] // 删除一个现有链接
Scene2: 配置本地git的信息
1
2
3
1. git config --global user.name [user_name]   // 配置用户名

2. git config --global user.email [user_email] // 配置邮箱

打标签(tag)

1
2
3
1. git tag v1.0 commit_id   // 给某一此commit添加tag

2. git push origin master --tags // 把本地的标签push到远程仓库

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
1. git init // 初始化本地仓库
2. git remote add [rmt_name] [git_url] // 构建远程仓库连接
3. git pull [rmt_name] [branch_name] // 拉取远程分支并自动合并
4. git push [rmt_name] [branch_name] // 将本地代码推送到远端的master分支
5. git fetch [rmt_name] [branch_name] // 拉取远程分支,但不自动
6. git clone [git_url] // 拷贝远程仓库到本地
7. git status // 查看哪些文件被修改了,发现所有的文件修改都是你所希望的
8. git add . // 将所有的文件修改都添加到暂存区
9. git commit -m "本次提交的信息" // 将暂存区的内容提交到本地仓库
10. git checkout [file_name] // 撤销对原有文件的修改,如果有多个文件,重复执行此操作
11. git checkout . // 撤销本次所有的修改
12. git clean -df // 恢复新增的或删除的文件
13. git reset // 把add的文件全部从暂存区取出来,如果只想取出单个文件,后面可以跟文件名
14. git reset --soft [commit_id] // 撤销此次commit并保留所有的修改
15. git reset --hard [commit_id] // 撤销此次commit并删除所有的修改
16. git log // 查看所有的提交日志
17. git log --oneline // 查看所有的提交日志(简化版)
18. git log [branch_name] // 查看某分支的提交记录
19. git commit --amend // 修改上一次提交的信息(未push)
20. git commit --amend --reset-author // 修改上一次提交的作者信息(未push)
21. git push -f [rmt_name] [branch_name] // 强制覆盖远端仓库,即进行远端仓库的回滚,此操作不可逆
22. git diff [file_name] // 对比该文件修改前后的区别,如果无文件名将对比所有文件的修改
23. git branch [new_branch_name] // 创建一个新的分支
24. git checkout [new_branch_name] // 切换到新分支
25. git branch // 查看分支
26. git merge [branch_name] // 合并分支
27. git merge --patch [branch_name] [file_name] // 只合并单个文件
28. git branch -d [branch_name] // 删除本地分支, -d会判断是否合并,-D会强制删除
29. git push rmt --delete [branch_name] // 删除远程仓库的分支
30. git remote // 查看现有的远程仓库链接名
31. git remote -v // 相比于上一条多了url信息,更加详细
32. git remote rm [rmt_name] // 删除一个现有链接
33. git config --global user.name [user_name] // 配置用户名
34. git config --global user.email [user_email] // 配置邮箱
35. git tag v1.0 commit_id // 给某一此commit添加tag
36. git push origin master --tags // 把本地的标签push到远程仓库