概述:
虽然一直在使用git,但是也只会使用简单的指令,下面系统地总结一些指令
配置git
ssh-keygen
cat /home/xxx/.ssh/id_rsa.pub #复制到git上
配置端口
vim ~/.ssh/config
流程及相关指令:
git clone [url] :拷贝一个git仓库到本地,让自己能够查看及修改
默认情况下,git会根据url所指示的项目的名称取创建本地项目路径, 如果想要不一样的名字,可以在命令后加上想要的名称
git add 可以将某个或者几个文件添加到缓存
git status :以查看在上次提交之后是否有修改
加上-s参数,以获得简短的结果输出
尚未缓存的改动:git diff
查看已缓存的改动: git diff --cached
查看已缓存的与未缓存的所有改动:git diff HEAD
显示摘要而非整个 diff:git diff --stat
git commit 将 缓存区内容提交到仓库中
git reset HEAD 取消已缓存的内容
git rm <file> 从git中移除某个文件
git rm --cached <file> 把文件从暂存区域移除,但仍希望保留在当前工作目录中
其他重要指令
1. git checkout/git branch
git checkout:
操作文件:放弃单个文件或者某个目录下的修改
操作分支:切换到某个分支;git branch -b如果分支存在则只切换分支,若不存在,则创建并切换分支
git branch:
创建分支
2. git merge/git rebase
git rebase:会把你当前分支的 commit 放到公共分支的最后面,所以叫变基。就好像你从公共分支又重新拉出来这个分支一样。
举例:如果你从 master 拉了个feature分支出来,然后你提交了几个 commit,这个时候刚好有人把他开发的东西合并到 master 了,这个时候 master 就比你拉分支的时候多了几个 commit,如果这个时候你 rebase master 的话,就会把你当前的几个 commit,放到那个人 commit 的后面。
git merge:会把公共分支和你当前的commit 合并在一起,形成一个新的 commit 提交
3. git show
4. git cherry-pick
从其他分支复制指定的提交,然后导入到现在的分支
cherry-pick 过程中也是可能会产生冲突的,解决冲突后先 add,然后使用 git cherry-pick --continue
。
如果想放弃 cherry-pick,使用 git cherry-pick --abort
5. git lfs
git 会对上传文件的大小有限制,如果需要上传100M以上大小的文件,需要使用git lfs
安装
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.rpm.sh | sudo bash
sudo yum install git-lfs
git lfs install
在git add之前,使用track追踪需要上传的大文件
git lfs track "*.png"
6. 删除分支
删除本地分支
git branch -d feature/name ##-D强制删除
删除远程分支
git push origin --delete feature/name
7. tag
添加tag
git tag -a v1.1 -m "my version v1.1"
提交tag到远程
git push origin v1.1
删除tag
git tag -d v1.1
git push origin :refs/tags/v1.1
使用git可能会遇到以下情景
1. 正常提交代码
git clone
git checkout -b feature/xxx
git add
git commit *
git push origin feature/xxx
git pull --rebase origin dev
2. 撤销已经推送push到远端仓库的提交信息
撤销提交信息
1.git log 查看提交信息
2. git reset --soft 版本号 soft 保留当前工作区,hard撤销工作区修改,谨慎使用
3. git push origin fearture/xxx --force
3. 自己修改的代码不想提交,同时想拉取仓库的最新代码
git stash
git pull
git stash pop
4.提交代码时遇到冲突
1. git checkout feature/XXXX && git pull --rebase origin develop
2. 解决冲突
3. 稍微测试一下冲突部分代码(如果没有单元测试)
4. git push -f origin feature/XXXXX
管理员接受PR后
5. git checkout develop && git branch -d feature/XXXX && git push origin :feature/XXXX
5. 在一个本地分支A上git add commit成功之后,想提交到另外一个分支B
切换到要提交的分支B上
git merge A
6. 查看
alias glog="git log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all"