Git命令速查手册
1. 首次设置
设置个人标识(全局生效):
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
设置个人标识(仅在项目内生效):
$ git config user.name "John Doe"
$ git config user.email johndoe@example.com
设置编辑器。缺省会使用默认的编辑器。git commit时会打开编辑器,让你填写提交日志:
$ git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"
查看设置项的值:
$ git config --list --show-origin
2. 克隆远程仓库到本地
$ git clone https://some-site.com/path-to/helloworld.git
如果需指定本地目录名:
$ git clone https://some-site.com/path-to/helloworld.git helloearth
3. 查看文件状态
$ git status
如果需要以short方式输出结果:
$ git status -s
M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
?? LICENSE.txt
- _M:已修改未暂存
- MM:已修改且暂存,然后又修改
- A_:新文件已暂存
- M_:已修改且暂存
- ??:未跟踪的文件
记法:前面的字符表示暂存状态,后面的字符表示修改状态
4. 查看文件的修改内容
查看未暂存的修改内容:
$ git diff [文件名]
查看已暂存但未提交的修改内容:
$ git diff --staged [文件名]
使用外部工具查看文件修改内容:
$ git difftool [--staged] 文件名
5. 将修改添加到暂存区
添加未追踪文件、添加已追踪文件的修改到暂存区的命令是一样的:
$ git add file1 file2 ...
6. 提交暂存区到仓库
$ git commit
上面的命令会打开编辑器让你填写提交日志。如果想在命令中直接填写提交日志,那么执行下面的命令:
$ git commit -m "你的日志"
7. 暂存提交一步解决
暂存、提交所有已跟踪的文件(使用这个命令要小心,不要提交了不该提交的东西):
$ git commit -a
暂存、提交指定文件:
$ git commit -a file1 file2 ...
8. 移除文件
$ git rm [文件名]
上面的命令会把文件移除,并把文件的移除动作添加到暂存区。之后commit即可将移除提交到仓库中。
如果你想移除一个已经添加到暂存区的文件,使用上面的命令会失败。此时,可加-f参数强制移除,或加-cache移除但在磁盘保留文件:
$git rm -f [文件名]
$git rm -cache [文件名]
9. 撤销
撤销添加到暂存区的操作:
$ git reset HEAD [文件名]
撤销工作目录中文件的修改(git用最后提交的版本来覆盖它,对文件做的修改将消失,无法追回):
$ git checkout -- [文件名]
10. 查看提交记录
基本命令:
$ git log
显示每次提交的详细变动(查看变动的代码行):
$ git log -p (或--patch)
显示每次提交的概要变动(包括修改了哪些文件,以及变动的行数统计):
$ git log --stat
将每次提交记录显示为一行(仅显示版本号及日志):
$ git log --pretty=oneline
显示前两周的提交记录:
$ git log --since=2.weeks
显示指定日期之后的提交记录:
$ git log --since='2020-01-20'
显示指定日志迁建的提交记录:
$ git log --until='2020-02-29'
提取指定作者的提交记录:
$ git log --author='tony.stark'
提取日志中包含指定关键字的提交记录:
$ git log --grep='keywords'
11. 分支操作
列出本地分支,结果中带’*'的就是本地的当前分支:
$ git branch
* master
列出所有分支,包括远程分支:
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
创建本地分支,不会切换到新建的分支上:
$ git branch <newbranchname>
切换到本地分支:
$ git checkout <branchname>
切换到本地分支,如果不存在则创建之:
$git checkout -b <newbranchname>
删除本地分支:
$ git branch -d <branchname>
合并本地分支<branchname>到当前分支:
$ git merge <branchname>
查看已经merge到当前分支的分支:
$ git branch --merged
查看还未merge到当前分支的分支(使用-d删除这些分支无法成功,使用-D可强制删除,但丢失该分支上的提交记录,除非使用提交的SHA1值才能找回):
$ git branch --no-merged
12. 如果合并分支时发生冲突,怎么办?
如果合并分支时发生冲突,会输出下面内容:
$ git merge iss53
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
此时运行git status查看冲突的文件:
$ git status
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: index.html
no changes added to commit (use "git add" and/or "git commit -a")
打开冲突的文件,git在冲突的地方添加了标记 <<<<<<<
, =======
, 和 >>>>>>>
:
<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
please contact us at support@github.com
</div>
>>>>>>> iss53:index.html
将代码修改正确。
然后使用git add命令暂存,然后git commit提交。
如果你配置了冲突修改工具,那么在合并发生冲突之后,运行mergetool。可在图形工具中解决冲突:
git mergetool
13. 操作远程仓库
查看远程仓库信息:
$ git remote -v
origin http://10.0.200.60/SDK_Dev/wechat_proxy.git (fetch)
origin http://10.0.200.60/SDK_Dev/wechat_proxy.git (push)
$ git remote show origin
* remote origin
Fetch URL: http://10.0.200.60/SDK_Dev/wechat_proxy.git
Push URL: http://10.0.200.60/SDK_Dev/wechat_proxy.git
HEAD branch: master
Remote branch:
master tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)
拉取本地当前分支所绑定的远程分支,合并到当前分支。
$ git pull
上传本地当前分支到其绑定的远程分支:
$ git push
如果本地的当前分支没有绑定远程分支,那么需使用下面指令拉取和上传:
$ git pull <remote> <branch>
$ git push <remote> <branch>
检出远程分支,在本地创建一个绑定它的分支,并切入该分支:
$ git checkout -b <本地分支名> <remote>/<远程分支名>
检出tag,在本地创建一个分支,且切入该分支(用来对tag进行代码查看、或bug修复):
$ git checkout -b <branchname> <tagname>
删除远程分支:
$ git push origin --delete <branchname>
14. 获取帮助
$ git <command> -h
或(这个输出更详细)
$ git <command> help