0%

Git常用命令

0. git帮助

1. git配置

通过git config命令配置。–global选项指定读写的配置文件路径为~/.gitconfig,只针对当前用户。

1
2
3
4
5
git config --global user.name  "user" 		  #设置用户名
git config --global user.email "user@163.com" #设置邮箱
git config --global core.editor emacs #设置默认文本编译器为emacs
git config --list #检查所有git配置
git config <key> #检查git某一项配置,如user.name

忽略文件 —— .gitignore

2. 获取与创建git仓

1
2
git init        		#将当前目录初始化为git仓
git clone [url] #克隆现有仓库

3. 添加/删除文件

跟踪文件

1
2
git add <file>	 		#跟踪某个新文件,将内容从工作目录添加到暂存区
git add . #跟踪所有新文件

移除文件

1
2
3
4
5
git rm    				#从git中移除文件,并连带从工作目录中删除指定文件
git rm -f #如删除之前有修改并已放到暂存区,必须指定-f选项,防止误删还没有添加到快照的数据不能被git恢复
git rm --cached #把文件从git暂存区删除,但在工作目录保留该文件
git mv <file1> <file2> #移动文件,相当于执行以下三条命令
#mv file1 file2, git rm file1, git add file2

提交更新

1
git commit       		#提交更新

4. 查看信息

查看当前文件状态

1
git status       		#检查当前文件状态

查看提交历史

1
2
3
4
git log --pretty=oneline #将每个提交放在一行显示
git log -p -2 #-p用来显示每次提交的内容差异, -2表示显示最近两次提交
git log --stat #查看每次提交的简略信息
git reflog #显示最近的提交记录

查看修改和差异

1
2
3
4
5
git diff 						 #比较工作目录中当前文件和暂存区快照之间差异,即修改后未暂存的变化
git diff --cached [file] #查看暂存区与上一个commit的差异
git diff --staged [file] #等同于--cached
git diff HEAD #显示工作区与当前分支最新commit的差异
git diff [commitID1] [commitID2] #比较两次提交记录的差异,比如HEAD和HEAD~1

5. 分支

查看分支

1
2
git branch								 #列出所有本地分支
git branch -a #列出所有本地分支和远程分支

新建分支

1
2
3
git branch [branch_name]				 #创建新分支,但仍然停留在当前分支
git branch [branch_name] [commitID] #创建新分支,并指向指定commit
git checkout -b [branch_name] [tag_name] #在特定标签上创建一个分支

切换分支

1
2
git checkout [branch_name] 				 #切换分支
git checkout -b [branch_name] #创建并切换分支

删除分支

1
2
git branch -d [branch_name]				 #删除分支
git branch -D [branch_name] #强制删除分支

合并分支

1
2
3
git merge  [branch]			   #将branch分支内容合并到当前分支
git rebase [branch] #将branch分支内容变基到当前分支
git rebase [branch1] [branch2] #将branch2分支变基到目标分支branch1,省去切换分支的步骤
merge和rebase的区别
  • merge —— 把两个分支的最新快照及二者最近的共同祖先进行三方合并。
  • rebase —— 变基,将提交到某一个分支所有修改移到另一个分支。

注:只对从未推送至公共仓库的提交执行变基命令,只把变基命令用作推送前清理提交使之整洁的工具。

6. 撤销、清理、重写

撤销操作

1
2
3
git reset HEAD <file> 	 		#取消暂存的文件
git checkout -- <file> #撤销文件修改,将文件还原成上次提交的状态
git reset --hard <commitID> #回退到具体版本号

清理工作目录

1
2
3
git clean -df 				# 移除工作目录中没有忽略的未追踪文件及空的子目录, -d表示删除,-f表示强制
git clean -dn # -n查看将会删除哪些文件,不会真正删除
git clean -xdf # 指定-x额外移除已忽略的未追踪文件

重写历史

1
2
git commit --amend  		#修改最后一次提交
git rebase -i [commitID] #修改多个历史提交

7. 项目共享与更新

远程仓库

1
2
3
git remote -v 					 #查看远程仓库
git remote add <shortname> <url> #添加新的远程git仓库
git remote rm <shortname> #移除远程仓库

抓取、推送

1
2
3
4
git fetch [remote] 		 		    #拉取远程仓库数据到本地,但不会自动合并
git pull [remote] [branch] #相当于git fetch和git merge命令的组合
git push [remote] [branch] #推送本地分支到远程, -f强制推送
git push [remote] –-delete [branch] #删除远程分支

8. git设置别名

通过git config为git命令创建别名后,无需每次输入完整的git命令,简化了操作

1
2
3
4
5
6
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'

参考资料

《Pro Git》第2版: https://www.progit.cn