Git基本命令
这些是我工作中经常用到的git命令和流程,有谬误和有不足之处,请大家帮忙指证。
拉取代码
git clone http://gitee.com/master.git
// 指定分支
git clone -b brach-name http://gitee.com/master.git
提交到本地
git add .
git add 文件名
git commit -m 'commit信息'
// 一次搞定
git add . && git commit -m 'commit信息'
查看状态
git status
查看提交日志
git log
// 一条日志打印一行
git log --pretty=oneline
git reflog
- 查看单个文件的提交日志
git log -p file
- 显示分支线
git log --graph
git log --graph --pretty=oneline
按q
推出查看
回退
- 将暂存文件回退 到 修改状态
git reset
- 软回退,将commit的代码回退,代码会保留
// 前一次
git reset --soft HEAD^
// 前两次
git reset --soft HEAD^^
// 前10次
git reset --soft HEAD~10
// 回退到指定commit
git reset --soft commitID
- 硬回退,本地commit但未push时慎用,会造成代码丢失
git reset --hard HEAD^
git reset --hard commitID
回退后代码丢失,怎么找回?
1.有过commit,但是未push
- 执行 git reflog
- 执行 git reset --hard HEAD@{7}
2.有过add,但是未commit
-
执行:git fsck --lost-found
-
在项目git目录下的 /.git/lost-found/other里有你add过的文件
-
或者执行:find .git/objects -type f | xargs ls -lt | sed 60q
-
找回本地仓库里边最近add的60个文件,
-
根据
commitID
来pick这次commit
git cherry-pick commitID
拉取
- 拉取当前分支最新代码
git pull
- 拉取仓库最新分支
git fetch
分支
- 查看分支
git branch
git branch -a
- 分支重命名
git branch -m oldBranch newBranch
- 删除分支
git branch -D removeBranch1 removeBranch2
- 批量删除分支
// 批量删除 以dev开头的分支
git branch | grep 'dev*' | xargs git branch -d
- 新建分支
git branch 分支名
- 切换分支
git checkout 分支名
stash
暂存,暂存区是栈型结构(先进后出)
- 暂存当前未提交代码
git stash
- 查看暂存列表
git stash list
- 应用最近的一次暂存,会将栈顶的stash pop出来,会被清除
git stash pop
- 应用某一次暂存,暂存不会被清除
git stash apply stash@{x}
- 清除暂存
// 清空暂存列表
git stash clear
// 清除某一次暂存
git stash drop stash@{x}
合并
- 将其他分支代码合并到当前分支
git merge origin/master
rebase大法
- rebase要在自己的分支上操作
git rebase master
// 终止rebase操作,回到执行rebase指令前的状态
git rebase --abort
// 解决了合并冲突后,继续应用剩余commit
git rebase --continue
rebase详解
merge
和rebase
的区别
merge
命令会保留原始的 commit时间,合并到其他分支后会新增一个合并的commit信息,- git记录是分叉的,自己的commit会按照时间插入主分支,会和其他commit混在一起
master------1------2------3---------------
\ / merge
branch ----a------b----
合并后的记录
master ---1-----2-----a-----3------b-----merge commit---
rebase
命令会修改你的commit时间信息,将你的commit集中放在master的最前面rebase
不会产生新生新的commit记录,分支的commit更加集中,commit历史更干净
master------1------2------3---------------
\ / rebase
branch ----a------b----
合并后的记录
master ---1-----2-----3------a------b-----
命令简写
git clone 简写 gcl
git add 简写 ga
git commit 简写 gc
git branch 简写 gb
git checkout 简写 gco
git cherry-pick 简写 gcp
使用场景
项目怎么用git管理?
- 会生成.git隐藏目录,不想用git管理了可以删除改目录
git init
添加账号,设置提交账号和邮箱
// 设置全局
git config --global user.name "Author Name"
git config --global user.email "Author Email"
// 或者设置本地项目库配置
git config user.name "Author Name"
git config user.email "Author Email"
远程仓库建好了,怎么把代码push上去?
- 将代码首次推送到git仓库
// 1、添加远程仓库地址
git remote add origin https://gitee.com/miller_wang/xxx.git
// 2、获取远程库与本地同步合并(如果远程库不为空必须做这一步,否则后面的提交会失败)
git pull --rebase origin master
// 3、推送到远程仓库
git push -u origin master
当前还有未提交的代码,怎么切换到其他分支?
git stash
暂存当前未提交代码- 切换到其他分支,完成其他任务
- 切回到当前分支 执行
git stash pop
将暂存的代码应用到当前分支
合并到目标分支有冲突
- 切换到目标分支,执行
git pull
拉取目标分支最新代码 - 切回当前分支,执行
git merge 目标分支
,将目标分支代码合回当前分支 - 修复冲突,提交代码,再进行合并操作
提交的commit信息不对,怎么改?
- 执行
git reset --soft HEAD^
,回退最近一次commit - 软回退之后代码还在,再提交一次
提交的commit信息已经push上去了,怎么改?
- 前两步同上,push时加上 -f,
push -f
强制推送,会将远程代码的commit覆盖掉
想将代码回退到某一次的提交?
- 找到这次提交的commitID,执行
git reset --hard commitID
最近提交了5个commit,第2个、第4个commit的代码不想要了?
- 将代码回退到5个commit之前,
git reset --hard HEAD~5
或者找到 5次提交前的commitID
git reset --hard commitID
- 找到第1、3、5次提交的commitID,依次
cherry-pick
git cherry-pick 1
git cherry-pick 3
git cherry-pick 5
fork了一个项目,怎么将源项目的最新代码同步到本地?
- 再添加一个
remote
地址,forkOrigin
是这个远程仓库的名字
git remote add forkOrigin https://gitee.com/xxx.git
- 拉取 源项目 最新代码
git pull forkOrigin master
小结
如果这篇文章对你有帮助,请帮我点个赞吧