git config

git config --global user.name "example"
git config --global user.email example
git config --list
ssh-keygen -t rsa -C "example"

git clone

git clone < repo url >

git branch

git branch //列出本地分支
git branch -r //列出远程分支
git branch -a //列出所有分支
git branch test //切换至test分支,确保当前无修改,如果分支不存在则创建分支
git branch -d test //删除test分支
git branch -D test //强制删除test分支
git branch -vv //查看最近一次提交
git branch -m newtest //修改分支名称
git push origin --delete test //删除远程test分支

git checkout

git checkout filename //放弃单个文件的修改
git checkout . //放弃当前目录的修改
git checkout branchname //切换到branchname分支
git checkout -b test //如果存在切换到test分支,不存在则创建分支并切换到该分支

git merger/rebase

git merge/rebase test //将test分支合并到当前分支
git merge/rebase -m "info" //合并时添加描述

# 区别:
# 如果合并出现冲突的话,解决冲突后git merge需要 git add,git commit,之后merge。
# rebase则只需要git add,之后git rebase --continue,如果不想解决冲突且不在合并,可以git rebase --abort

git pull/fetch

git pull //从远端获取代码合并到本地分支
git fetch //从远程拉取更新不合并

git cherry-pick

git cherry-pick commitId //合并某一次提交

回退远端

git push origin HEAD --force

图形界面

gitk

tags

git tag -a <ver> <commit id> -m "备注" #指定commit id新增tag
git push --tags #推送所有tag到远端
git push origin tagname #推送单个tag
git tag -d tagname #删除本地tag
git push origin :refs/tags/tagname #删除远端tag

本地仓库推送到远端

# github新建仓库,拿到地址
$git remote add origin < repo url >
$git push --set-upstream origin master

git clean 清除文件

git clean -n [path] #显示path目录下会被删除的文件,但是不会显示文件夹
git clean -f [path] #删除当前目录的新增文件,但是不会删除文件夹
git clean -df #删除当前目录新增文件,包括文件夹
git clean -xdf #删除新增,包括gitignore

修改注释

git commit --amend

# 保存退出
ctrl+x
enter

同步子仓库

git submodule update --init

应用patch

# 1. 进入需要更新的目录
# 2. 执行命令,-p指忽略的目录层级,-p 1指忽略第一层目录
cat ~/test.patch | patch -p 1

HTTPS

git config --global http.sslverify false
git config --global https.sslverify false
git config --global credential.helper store

CRLF

git config core.autocrlf input

git revert 撤销某个commit的修改

git revert <commit-hash>