git是代码管理中最为常用的工具,在实际工作中,熟练使用git命令,会帮助提高工作效率。
常用命令
-
git add
# 添加某个文件到暂存区,后面可以跟多个文件,以空格区分 git add xxx # 添加当前更改的所有文件到暂存区。 git add .
-
git commit
# 提交暂存的更改,会新开编辑器进行编辑 git commit # 提交暂存的更改,并记录下备注 git commit -m "you message" # 等同于 git add . && git commit -m git commit -am # 对最近一次的提交的信息进行修改,此操作会修改commit的hash值 git commit --amend # 不编辑提交 git commit --amend --no-edit
-
git pull
# 提交暂存的更改,会新开编辑器进行编辑 git commit # 提交暂存的更改,并记录下备注 git commit -m "you message" # 等同于 git add . && git commit -m git commit -am # 对最近一次的提交的信息进行修改,此操作会修改commit的hash值 git commit --amend
-
git fetch
# 获取远程仓库特定分支的更新 git fetch <远程主机名> <分支名> # 获取远程仓库所有分支的更新 git fetch --all # 从远程分支拉取代码 git fetch origin <#host-branchname>:<#local-branchname>
-
git branch
# 新建本地分支,但不切换 git branch <branch-name> # 查看本地分支 git branch # 查看远程分支 git branch -r # 查看本地和远程分支 git branch -a # 删除本地分支 git branch -D <branch-nane> # 重新命名分支 git branch -m <old-branch-name> <new-branch-name>
-
git 检查状态
# 列出提交历史 git log # 查看一行历史 git log --oneline # 查看历史中什么时候出现了分支合并 git log --graph # 逆向显示所有日志 git log --reverse # 查找指定用户的提交日志 git log --author=<#name> --oneline -<#checkLineNumber> # 检查git操作步骤 git reflog # 查看某次提交 git show <#commitid> # 对比工作区与分支上有什么不同 git diff # 显示工作区和暂存区的状态 git status
-
git checkout
# 切换分支 git checkout <#branch> # 从仓库中恢复工作树全部文件 git checkout . # 从仓库中恢复工作树某个文件 git checkout <#filename> # 采用此种方法建立的本地分支会和远程分支建立映射关系 并自动切换到本地该分支 git checkout -b <#local-branchname> <#host-branchname>
-
git rm
# 删除某个文件 git rm <#filename> # 删除某个文件夹 git rm -r <#mkdir> # 删除索引中添加的文件 git rm --cached <#filename>
git的工作区域和流程
Workspace:工作区,就是平时进行开发改动的地方,是当前看到最新的内容,在开发的过程也就是对工作区的操作
Index:暂存区,当执行 git add
的命令后,工作区的文件就会被移入暂存区,暂存区标记了当前工作区中那些内容是被 Git 管理的,当完成某个需求或者功能后需要提交代码,第一步就是通过 git add
先提交到暂存区。
Repository:本地仓库,位于自己的电脑上,通过 git commit
提交暂存区的内容,会进入本地仓库。
Remote:远程仓库,用来托管代码的服务器,远程仓库的内容能够被分布在多个地点的处于协作关系的本地仓库修改,本地仓库修改完代码后通过 git push
命令同步代码到远程仓库。
工作中常见问题并解决
-
新建了一个不需要的文件,想删除文件,但是出现了错误
fatal: pathspec '<#filename>' did not match any files
解决方法:
git add <#filename> git rm -f <#filename>
原因:新建文件被列为被忽略的文件,不在git的控制,所以加一下即可。
-
有些修改只想在本地,比如在做非证书真机调试的时候,Targets中的修改不想提交上去,但是需要保存且切换分支pull最新代码
解决方法:
# 把本地的改动暂存起来 git stash # 执行存储时,添加备注,方便查找。 git stash save "message" # 应用最近一次暂存的修改,并删除暂存的记录 git stash pop # 应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即 stash@{0},如果要使用其他个,git stash apply stash@{$num} 。 git stash apply # 查看 stash 有哪些存储 git stash list # 删除所有缓存的 stash git stash clear
-
在一家有代码自动化review的公司工作,经常会遇到诸如commit message不规范,push时commit 提交数大于限制情况。
解决方法一:
# 合并多次提交,合并commitid之前的提交 git rebase -i <#commitid>
此时会进入一个vim的交互页面,基于某一次提交的不需要改,被合并的使用Squash进行合并,至少保留一个pick,否则命令会失败。修改完wq退出即可。
解决方法二:
# 如果后面没接参数,指的是回退当前版本 git reset HEAD^<#versionNumber>
注意,这里不要加--hard,一旦加了,就连工作区的修改一同撤销了,切记!!!!
-
如果某一次提交可能存在潜在风险,用reset方式,显然有些暴力且低效
解决方法:
# 撤销某次普通commit git revert <#commitid> # 撤销某次merge的commit git revert <#commitid> -m