|
|
|
@ -10,7 +10,7 @@
|
|
|
|
|
##############################################################################
|
|
|
|
|
git config --global "Your Name"
|
|
|
|
|
git config --global "Email Address"
|
|
|
|
|
git config --global credential.helper store 保存密码(每次要输密码/重复输密码)
|
|
|
|
|
git config --global credential.helper store 保存密码(每次要输密码/重复输密码)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
@ -95,26 +95,26 @@ git log --since="1 weeks 2 days 3 hours 40 minutes 50 seconds ago" 过去1周2
|
|
|
|
|
##############################################################################
|
|
|
|
|
# 版本回退、前进
|
|
|
|
|
##############################################################################
|
|
|
|
|
git reset --hard HEAD^ 回退到上1版本
|
|
|
|
|
git reset --hard HEAD~5 回退到上5个版本
|
|
|
|
|
git reset --hard id 回退到指定版本
|
|
|
|
|
git reset --hard HEAD^ 回退到上1版本
|
|
|
|
|
git reset --hard HEAD~5 回退到上5个版本
|
|
|
|
|
git reset --hard id 回退到指定版本
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
# 撤销修改
|
|
|
|
|
##############################################################################
|
|
|
|
|
git checkout -- <file> 撤销修改:误修改工作区文件,未git add/commit
|
|
|
|
|
git restore <file> 撤销修改:误修改工作区文件,未git add/commit
|
|
|
|
|
git reset HEAD <file> 撤销git add:误将文件加入暂存区(git add),未git commit
|
|
|
|
|
git reset --hard HEAD^ 撤销git commit:误将文件提交(一旦提交,只能通过版本回退进行撤销)
|
|
|
|
|
git checkout -- <file> 撤销修改:误修改工作区文件,未git add/commit
|
|
|
|
|
git restore <file> 撤销修改:误修改工作区文件,未git add/commit
|
|
|
|
|
git reset HEAD <file> 撤销git add:误将文件加入暂存区(git add),未git commit
|
|
|
|
|
git reset --hard HEAD^ 撤销git commit:误将文件提交(一旦提交,只能通过版本回退进行撤销)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
# 删除与恢复
|
|
|
|
|
##############################################################################
|
|
|
|
|
git rm/add <file>
|
|
|
|
|
git commit -m "remove <file>" 删除版本库中的<file>:删除工作区文件后,继续删除版本库中相应的文件
|
|
|
|
|
git checkout -- <file> 根据版本库中的<file>恢复工作区<file>
|
|
|
|
|
git commit -m "remove <file>" 删除版本库中的<file>:删除工作区文件后,继续删除版本库中相应的文件
|
|
|
|
|
git checkout -- <file> 根据版本库中的<file>恢复工作区<file>
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
# 清理工作区未track也未ignore的文件或文件夹(如各种临时.swp, .patch文件等)
|
|
|
|
@ -128,33 +128,33 @@ git clean -df #清理所有未track文件和文件夹, 常用, 但使用前确
|
|
|
|
|
##############################################################################
|
|
|
|
|
# 关联GitHub远程仓库(本地到远程)
|
|
|
|
|
##############################################################################
|
|
|
|
|
git remote add origin <remote address> 在本地工作区目录下按照 GitHub 提示进行关联
|
|
|
|
|
git remote rm origin 解除错误关联
|
|
|
|
|
git push -u origin master 第一次将本地仓库推送至远程仓库(每次在本地提交后进行操作)
|
|
|
|
|
git push origin master 以后每次将本地仓库推送至远程仓库(每次在本地提交后进行操作)
|
|
|
|
|
git remote add origin <remote address> 在本地工作区目录下按照 GitHub 提示进行关联
|
|
|
|
|
git remote rm origin 解除错误关联
|
|
|
|
|
git push -u origin master 第一次将本地仓库推送至远程仓库(每次在本地提交后进行操作)
|
|
|
|
|
git push origin master 以后每次将本地仓库推送至远程仓库(每次在本地提交后进行操作)
|
|
|
|
|
<remote address>:
|
|
|
|
|
git@github.com:<username>/<repository>.git
|
|
|
|
|
https://github.com/<username>/<repository>.git
|
|
|
|
|
git@github.com:<username>/<repository>.git
|
|
|
|
|
https://github.com/<username>/<repository>.git
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
# 克隆GitHub远程仓库(远程到本地)
|
|
|
|
|
##############################################################################
|
|
|
|
|
git clone <remote address> git协议速度更快但通常公司内网不允许,https协议速度慢
|
|
|
|
|
git clone <remote address> git协议速度更快但通常公司内网不允许,https协议速度慢
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
# 分支管理:创建、切换、查看、合并、删除
|
|
|
|
|
##############################################################################
|
|
|
|
|
git branch <branch name> 创建<branch name>分支
|
|
|
|
|
git checkout <branch name> 切换至<branch name>分支
|
|
|
|
|
git switch <branch name> 切换至<branch name>分支
|
|
|
|
|
git checkout -b <branch name> 创建并切换至<branch name>分支
|
|
|
|
|
git switch -c <branch name> 创建并切换至<branch name>分支
|
|
|
|
|
git branch 查看已有分支(* 表示当前分支)
|
|
|
|
|
git merge <branch name> 合并<branch name>到当前分支(通常在master分支下操作)
|
|
|
|
|
git branch -d <branch name> 删除分支
|
|
|
|
|
git branch -m oldbranchname newname 删除分支
|
|
|
|
|
git branch <branch name> 创建<branch name>分支
|
|
|
|
|
git checkout <branch name> 切换至<branch name>分支
|
|
|
|
|
git switch <branch name> 切换至<branch name>分支
|
|
|
|
|
git checkout -b <branch name> 创建并切换至<branch name>分支
|
|
|
|
|
git switch -c <branch name> 创建并切换至<branch name>分支
|
|
|
|
|
git branch 查看已有分支(* 表示当前分支)
|
|
|
|
|
git merge <branch name> 合并<branch name>到当前分支(通常在master分支下操作)
|
|
|
|
|
git branch -d <branch name> 删除分支
|
|
|
|
|
git branch -m oldbranchname newname 删除分支
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
@ -174,63 +174,63 @@ git merge --no-ff -m "descriptions" <branch name>
|
|
|
|
|
##############################################################################
|
|
|
|
|
# 开发流程:
|
|
|
|
|
##############################################################################
|
|
|
|
|
master分支 发布稳定版本
|
|
|
|
|
dev分支 发布开发版本
|
|
|
|
|
<developer name>分支 个人开发分支(个人开发完成将该分支并入dev,同时保留该分支,继续开发)
|
|
|
|
|
master分支 发布稳定版本
|
|
|
|
|
dev分支 发布开发版本
|
|
|
|
|
<developer name>分支 个人开发分支(个人开发完成将该分支并入dev,同时保留该分支,继续开发)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
# Bug分支管理(建立单独分支进行bug修复)
|
|
|
|
|
##############################################################################
|
|
|
|
|
软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
|
|
|
|
|
git stash 保存当前工作现场(在dev未完成开发,但master有bug需要修复)
|
|
|
|
|
git stash pop 回到dev分支后恢复工作现场(list中的现场会同时被删除)
|
|
|
|
|
git stash list 查看当前存储的工作现场
|
|
|
|
|
git stash apply stash@{#} 回到指定工作现场(list中的现场不会被删除,需要用git stash drop)
|
|
|
|
|
git stash drop stash@{#} 删除指定工作现场
|
|
|
|
|
git cherry-pick <id> 在master修复好bug后,在dev复制一遍bug修复流程
|
|
|
|
|
git stash 保存当前工作现场(在dev未完成开发,但master有bug需要修复)
|
|
|
|
|
git stash pop 回到dev分支后恢复工作现场(list中的现场会同时被删除)
|
|
|
|
|
git stash list 查看当前存储的工作现场
|
|
|
|
|
git stash apply stash@{#} 回到指定工作现场(list中的现场不会被删除,需要用git stash drop)
|
|
|
|
|
git stash drop stash@{#} 删除指定工作现场
|
|
|
|
|
git cherry-pick <id> 在master修复好bug后,在dev复制一遍bug修复流程
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
# Feature分支管理(建立单独分支添加新功能)
|
|
|
|
|
##############################################################################
|
|
|
|
|
软件开发中,总有无穷无尽的新的功能要不断添加进来。添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
|
|
|
|
|
git branch -D <branch name> 强制删除分支(丢弃未合并分支)
|
|
|
|
|
git branch -D <branch name> 强制删除分支(丢弃未合并分支)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
# 协作与分支推送
|
|
|
|
|
##############################################################################
|
|
|
|
|
User 1:
|
|
|
|
|
git remote [-v] 查看远程库信息(-v 查看详细信息)
|
|
|
|
|
git remote update origin --prune 更新分支列表(更新远程分支列表)
|
|
|
|
|
git remote update origin -p 更新分支列表(更新远程分支列表)
|
|
|
|
|
git push origin [master/dev/...] 推送指定分支到远程
|
|
|
|
|
git remote [-v] 查看远程库信息(-v 查看详细信息)
|
|
|
|
|
git remote update origin --prune 更新分支列表(更新远程分支列表)
|
|
|
|
|
git remote update origin -p 更新分支列表(更新远程分支列表)
|
|
|
|
|
git push origin [master/dev/...] 推送指定分支到远程
|
|
|
|
|
User 2:
|
|
|
|
|
git clone <remote address> 克隆到本地(只能克隆master)
|
|
|
|
|
git checkout -b dev origin/dev 本地新建分支并关联远程
|
|
|
|
|
git add/commit/push 添加、提交、推送更新
|
|
|
|
|
git clone <remote address> 克隆到本地(只能克隆master)
|
|
|
|
|
git checkout -b dev origin/dev 本地新建分支并关联远程
|
|
|
|
|
git add/commit/push 添加、提交、推送更新
|
|
|
|
|
User 1:
|
|
|
|
|
git add/commit/push 推送时报错(与user 2推送的更新冲突)
|
|
|
|
|
git add/commit/push 推送时报错(与user 2推送的更新冲突)
|
|
|
|
|
git pull <remote> <branch>
|
|
|
|
|
git branch --set-upstream-to=origin/<branch> <branch> 本地与远程关联
|
|
|
|
|
git pull 拉取远程文件(并解决冲突)
|
|
|
|
|
git commit/push 重新提交并推送
|
|
|
|
|
git branch --set-upstream-to=origin/<branch> <branch> 本地与远程关联
|
|
|
|
|
git pull 拉取远程文件(并解决冲突)
|
|
|
|
|
git commit/push 重新提交并推送
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
# 标签管理(常用于版本管理):查看、创建、操作
|
|
|
|
|
##############################################################################
|
|
|
|
|
git tag 查看标签
|
|
|
|
|
git show <tag name> 查看指定标签
|
|
|
|
|
git log --pretty=oneline --abbrev-commit --decorate=full 在log中显示标签
|
|
|
|
|
git tag <tag name> 为上次commit位置打标签
|
|
|
|
|
git tag <tag name> <commit id> 为指定commit位置打标签
|
|
|
|
|
git tag -a <tag name> -m "descriptions" <commit id> 为指定commit打标并添加描述
|
|
|
|
|
git tag -d <tag name> 删除本地标签
|
|
|
|
|
git push origin <tag name> 推送指定标签到远程
|
|
|
|
|
git push origin --tags 推送所有本地标签到远程
|
|
|
|
|
git push origin :refs/tags/<tag name> 删除远程标签(先删除本地标签)
|
|
|
|
|
git tag 查看标签
|
|
|
|
|
git show <tag name> 查看指定标签
|
|
|
|
|
git log --pretty=oneline --abbrev-commit --decorate=full 在log中显示标签
|
|
|
|
|
git tag <tag name> 为上次commit位置打标签
|
|
|
|
|
git tag <tag name> <commit id> 为指定commit位置打标签
|
|
|
|
|
git tag -a <tag name> -m "descriptions" <commit id> 为指定commit打标并添加描述
|
|
|
|
|
git tag -d <tag name> 删除本地标签
|
|
|
|
|
git push origin <tag name> 推送指定标签到远程
|
|
|
|
|
git push origin --tags 推送所有本地标签到远程
|
|
|
|
|
git push origin :refs/tags/<tag name> 删除远程标签(先删除本地标签)
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
# rebase(换基)
|
|
|
|
@ -420,30 +420,30 @@ fork --> clone --> add/commit/push --> pull request
|
|
|
|
|
##############################################################################
|
|
|
|
|
# 其他配置
|
|
|
|
|
##############################################################################
|
|
|
|
|
git config --global color.ui true 显示颜色
|
|
|
|
|
git config --global color.ui true 显示颜色
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
# 配置.gitignore文件
|
|
|
|
|
##############################################################################
|
|
|
|
|
/<dir name>/ 忽略文件夹
|
|
|
|
|
*.zip 忽略.zip文件
|
|
|
|
|
/<dir name>/<file name> 忽略指定文件
|
|
|
|
|
/<dir name>/ 忽略文件夹
|
|
|
|
|
*.zip 忽略.zip文件
|
|
|
|
|
/<dir name>/<file name> 忽略指定文件
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
# 文件.gitignore生效后
|
|
|
|
|
##############################################################################
|
|
|
|
|
git add -f <file> 强制添加
|
|
|
|
|
git check-ignore -v <file> 查看生效规则
|
|
|
|
|
git add -f <file> 强制添加
|
|
|
|
|
git check-ignore -v <file> 查看生效规则
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
# 配置别名
|
|
|
|
|
##############################################################################
|
|
|
|
|
git config [--global] alias.<alias> '<original command>' 为所有工作区/当前工作区配置别名
|
|
|
|
|
.git/config 当前工作区的配置文件
|
|
|
|
|
~/.gitconfig 当前用户的配置文件
|
|
|
|
|
git config [--global] alias.<alias> '<original command>' 为所有工作区/当前工作区配置别名
|
|
|
|
|
.git/config 当前工作区的配置文件
|
|
|
|
|
~/.gitconfig 当前用户的配置文件
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
|
|
@ -455,5 +455,5 @@ https://git-scm.com/book/en/v2
|
|
|
|
|
##############################################################################
|
|
|
|
|
# 子模块
|
|
|
|
|
##############################################################################
|
|
|
|
|
git submodule foreach git pull 子模块更新
|
|
|
|
|
git submodule foreach git pull 子模块更新
|
|
|
|
|
|
|
|
|
|