Git常用命令归纳
基本操作
- 克隆 GitHub 上的仓库到本地 git clone + [仓库地址]
- 查看本地仓库所关联的远程仓库信息 git remote -v
- 用于管理本地仓库所关联的主机 git remote ,还可以使用 -o 选项修改主机名。
- 把当前所在目录变成一个本地仓库git init
- 查看整个仓库的状态git status
- 跟踪此新建文件,把新增文件添加到暂存区,以备提交git add [文件名]
- 命令全部添加到暂存区git add .
- 撤销暂存区的修改git reset – [文件名] 或者 git rm --cached [文件名]
- 把暂存区的全部修改撤销git reset –
- 查看工作区被跟踪的文件的修改详情 git diff
- 查看暂存区的全部修改git diff --cached
- 查看版本区的提交历史记录git log
- 查看某分支的提交历史git log [分支名]
- 一行显示提交历史git log --oneline
- 查看最近 n 个提交git log -n ,其中 n 是数字
- 查看指定贡献者的提交记录git log --author [贡献者名字]
- 图示法显示提交历史git log --graph
- 提交版本按时间正序排列git log --reverse
- 可以查看配置信息git config -l
- 配置个人信息- -邮箱git config --global user.email “123@qq.com”
- 配置个人信息- -名字git config --global user.name “doudou”
- 暂存区提交到版本区git commit -m ‘备注信息’
- 查看全部分支信息git branch -avv
- 推送到远程仓库 git push
- 撤销最近的一次提交,将修改还原到暂存git reset --soft HEAD^ ,–soft 表示软退回,对应的还有 –hard 硬退回;HEAD^ 表示撤销一次提交,HEAD^^ 表示撤销两次提交,撤销 n 次可以简写为 HEAD~n。
- 强制推送 git push -f
- 查看本地提交的所有的记录 git reflog
- 回退到本地想要的版本git reset --hard [版本号] 或者git reset --hard HEAD@{2}
- 给git命令设置别名git config --global alias.[别名] [原命令],如果原命令中有选项,需要加引号
分支管理
- 更新远程分支信息到本地git fetch
- 拉取远程分支到本地git pull
- 使本地 master 分支基于远程仓库的 master 分支git rebase origin/master
- 创建新本地分支git checkout [分支名]
- 切换分支git checkout [分支名]
- 创建分支并切换到新分支git checkout -b [分支名]
- 新分支推送至远程仓库git push [主机名] [本地分支名]:[远程分支名] 即可将本地分支推送到远程仓库的分支中,通常冒号前后的分支名是相同的,如果是相同的,可以省略 :[远程分支名],如果远程分支不存在,会自动创建
- 本地分支跟踪远程分支 git branch -u [主机名/远程分支名] [本地分支名]
- 撤销本地分支对远程分支跟踪git branch --unset-upstream [分支名]
- 推送时就自动跟踪远程分支 git push -u [主机名] [分支名]
- 删除远程分支 git push [主机名] :[远程分支名]
- 删除多个远程分支 git push [主机名] :[远程分支名] :[远程分支名] :[远程分支名]
- 删除远程分支的命令:git push [主机名] --delete [远程分支名]
- 删除本地分支git branch -D [分支名]
- 本地分支改名 git branch -m [原分支名] [新分支名]
- 删除多个本地分支git branch -D [分支名] [分支名]
多人协作
1.fork
在别人的仓库中点此按钮会克隆一个完全一样的仓库到你自己的账号中,包括所有分支、提交等,但不会克隆 issue(本节后面会讲到),当此仓库发生版本变化,不会自动同步到你克隆的仓库里,反之亦然。
2.克隆仓库到本地
克隆从fork来的仓库到本地。
3.处理issue:
提交的时候,备注信息里有个 “fix #1”,这是必要的,当备注信息中含有此字样的 commit 出现在组长仓库,仓库中编号为 #1 的 issue 就会自动关闭。
4.完成任务之后推送到自己的仓库
我们要完成组长仓库的一个 issue,注意每个 issue 在创建后都会生成一个编号,我们首先完成 1 号 issue:
5.提 PR & 检查合并 PR
我们从组员的 work 仓库 master 分支给组长的 work 仓库 master 分支提一个 PR。
重要的一点:提了 PR 之后,一定要求参与项目的其他成员来检查合并,不要自己来,尽管自己有权限。
合并 PR 的方法有三种,分别解释一下:
Create a merge commit :这种方式会在组长仓库的 master 分支上生成一个新的提交,且保留 PR 中的所有提交信息。这是一种常规操作,用得最多。
Squash and merge :压缩合并,它会把 PR 中的全部提交压缩成一个。此方法的优点就是让提交列表特别整洁。一个 PR 里有很多提交,每个提交都是很细小的改动,保留这些提交没什么意义,这种情况就使用此方法合并 PR。
Rebase and merge :这种方法不会生成新的提交,例如 PR 中有 6 个提交,用此方法合并后,组长仓库也会新增 6 个提交。注意,这些提交的版本号与组员的提交不同,此外完全一样。
以上就是一次完整的修改、提交、推送、提 PR、合并 PR 的过程。
需要注意的一点:从 A 向 B 提 PR 后,在 PR 合并或关闭前,A 上所有新增的提交都会出现在 PR 里。
6.同步主仓库
组员的仓库同步组长的仓库,使它们的提交版本一致。
- 增加一个关联主机
git remote add [主机名] [主仓库的地址]注意:主仓库的地址使用 https 开头的。
主机名是随意定义的,只要不是 origin 就可以,因为自己的仓库地址对应的主机名是 origin,主仓库的主机名通常定义为 up 或 upstream,这个主机名其实就是一个变量,它的值就是仓库地址,例如 git push origin master 完全等于 git push git@github.com:Manchangdx/work master 。关联连接错误也没有什么变化,可以使用git fetch拉取主仓库的全部分支信息到本地仓库了。
- 执行命令同步主仓库
git pull --rebase up master
或者
git rebase up/master 前提是使用了git fetch
git标签
1.创建标签
git tag [标签名] -m [备注信息] [提交版本号]
其中 -m [备注信息] 可以省略不写,但建议不要省略。[提交版本号] 可以省略,如果是给当前分支最新的提交创建标签的话。
2.查看标签
显示仓库中的全部标签列表: git tag
查看标签详情:git show [标签名]
3. 删除本地标签
git tag -d [标签名]
删除本地标签,标签文件也会被删除
4. 将本地标签推送到远程仓库
推送标签到远程仓库 :git push origin [标签名]
将全部本地标签推送至远程仓库 :git push origin --tags
5. 删除远程仓库标签
git push origin :refs/tags/[标签名]
删除远程仓库的标签,命令中的标签名其实也就是文件名
6. 签出版本
签出版本就是指定某个提交版本创建一个新的分支。
首先执行 git checkout [标签名] 切换到之前的某个提交版本,然后执行 git checkout -b [新的分支名] 将此提交版本固定到一个新分支上并切换到此分支。