Git Common Command
git rm
git rm 移除指定文件
git rm -r -f 移除文件夹及文件夹下的所用内容
git stash
git stash save []
保存当前更改到暂存区,可选择性的添加描述信息
git stash pop [--index][]
恢复暂存区中最新的内容到工作区
--index 可选命令,If the --index option is used, then tries to reinstate not only the working tree’s changes,
but also the index’s ones. However, this can fail, when you have conflicts (which are stored in the index,
where you therefore can no longer apply the changes as they were originally).
stashId,指定要恢复的stash
恢复成功后会删除暂存区中的相应内容
git stash apply [--index][]
功能与 pop 相同, 但是恢复成功后不会删除暂存区中对应内容
git stash drop []
删除最近的一次暂存区内容
stashId, 删除指定的暂存区内容
git stash clear
清空暂存区
git stash list
列出所有保存的进度列表
git stash show []
显示最近的更改
stashId:显示指定的更改
git config相关
使用时的优先级为 local -> global -> system
配置用户名
git config --system user.name "(userName)"
git config --global user.name "(userName)"
git config --local user.name "(userName)"
--system 为对所有用户的所有仓库有效的配置信息
--global 为对当前用户的所有仓库有效的配置信息
--local 为对当前仓库有效的配置信息
配置用户邮箱
git config --system user.email "(uesrEmail)"
git config --global user.email "(userEmail)"
git config --local user.email "(userEmail)"
查看配置信息
git config --system --list
git config --global --list
git config --local --list
查看日志信息
包含作者信息,提交信息(m)
git log
git reflog
可以查看reset后的信息
git log [-p:显示提交的更改详情][number:显示提交的数目]
显示每次提交的增加删除行数
git log --stat
回退
reset 是在指定的commit之后的提交都被撤销,HEAD是回退到指定的提交的
git reset (commitId)
将HEAD指向回退到 commitId指定的地方,但不自动撤销之后修改的代码
可以通过手动修改并新建一个commit来保存修改
git reset --hard (commitId)
回退并自动撤销之后修改的代码
revert需要新建一个commit提交,HEAD是向后的
git revert HEAD
回退前一次提交的代码
git revert commitId
回退指定的提交,并需要创建新的提交
除了指定的提交,其他的提交内容不会改变
合并
本地分支上传合并到指定的远程分支
git push origin (localName):(remoteName)
本地分支拉取合并指定的远程分支
git pull origin (remoteName)
合并某个分支
git merge (branchName)
cherry-pick命令的合并
1.合并单次提交
git cherry-pick (commitId)
2.合并多个提交
^:区间[a,b];没有:区间(a,b]
git cherry-pick (commitIdA)[^]..(commitIdB) 区间:[commitIdA,commitIdB]
git cherry-pick (targetBranch~commitIdA)[^]..(targetBranch~commitIdB)
3.遇到冲突
解决冲突后,通过
a. git add .
b. git commit
c. git cherry-pick --continue
继续cherry-pick
4.一次只能存在一个cherry-pick, 如果要另起一个cheery-pick,则使用以下命令
a. git cherry-pick --quit 取消操作并回到之前的状态
Forget about the current operation in progress.
Can be used to clear the sequencer state after a failed cherry-pick or revert.
b. git cherry-pick --abort 取消操作并回到之前的状态
Cancel the operation and return to the pre-sequence state.
衍合分支,不会产生新的提交(与merge的不同)
git rebase (branchName)
衍合分支的分支(?,会自动切到grandsonBranchName分支下执行)
1.1 git rebase --onto(parentBranchName) (sonBranchName) (grandsonBranchName)
衍合分支的提交(commitId为parent切出分支的提交)
(^,表示[commitIdA,commitIdB],没有则是(commitIdA,commitIdB])
1.2 git rebase --onto (parentBranchName) (commitIdA)[^] (commitIdB)
[beginIndex,endIndex:索引值,倒数;beginIndex指向要包含的commit的前一次提交,endIndex要包含的最后一次提交]
(beginIndex,endIndex],索引倒数从 0开始到正无穷
1.3 git rebase --onto (parentBranchName) (sonBranchName~beginIndex) (sonBranchName~endIndex)
遇到冲突,解决冲突后
a. git add .
b. git rebase --continue
2. git checkout parentBranchName
3. git merge grandsonBranchName
其他命令
1. git rebase --skip 跳过冲突,且不保留冲突的部分(谨慎操作)
2. git rebase --quit 退出rebase, 保持当前状态
3. git rebase --abort 退出rebase , 回到之前的状态
分支创建
根据指定的远程分支创建本地分支
git checkout -b (localName) (remoteName)
从提交的节点[之前的内容,此次提交]创建分支
git checkout (commitId) -b (branchName)
从Tag创建分支
git checkout (tagName) -b (branchName)
Tag相关
在本地创建tag
git tag -a (tagName) [commitId] -m"(description)"
推送tag到远程仓库
git push origin (tagName)
删除本地tag
git tag -d (tagName)
删除远程的tag
git push origin :refs/tags (tagName)
删除相关
删除本地分支
git branch -d[D:强制删除] (branchName)
删除远程分支
git push origin --delete(branchName)
克隆相关
克隆全部
git clone (remoteSourceUrl) (localName)
克隆指定分支
git clone -b (branchName) (remoteSourceUrl) (localName)
其他
- Android Studio 命令窗口,log日志乱码
[git config --global i18n.commitencoding utf-8]
[git config --global i18n.logoutputencoding utf-8]
暂时性的: SET LESSCHARSET=utf-8
持久性的: 在window 环境变量中配置 key: LESSCHARSET value:utf-8
git remote -v
查看本地项目的远程地址
git remote add upstream (sourceRemoteURL)
添加源项目的地址
git fetch upstream
获取更新
git merge upstream/(localBranchName)
将更新合并到本地分支
git push
将更新推送到自己的远程分支
在.ssh文件夹下执行
1.配置用户信息
git config --global user.name "(userName)"
git config --global user.Email "(userEmail"
2.创建
ssh-keygen -t rsa -C "(userEmail)"
a.自定义保存key文件的名字,默认为id_rsa就好, 自定义的话还要写一个配置文件。
b.输入密码,不设置为空就好
c.将生成的公钥,在Git服务端上配置
3.ssh -T [email protected] 测试是否成功有效
- 从远程仓库获取数据时出错(目前只是clone时验证过)
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
reason: 缓存值太小
solve: git config --global(全局,不需要在仓库里才能执行此命令) http.postBuffer 52488000
error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054
reason: SSL证书错误
solve: env(只对单次生效) GIT_SSL_NO_VERIFY=true (正常的git clone命令)
项目克隆下来后可以对单项目配置
git config http.sslVerify "false"