初始化
- 添加SSH key
ssh-keygen -t rsa -C “your email” - 查看SSH key
vim ~/.ssh/id_rsa.pub
- 查看config信息
git config --list - 配置config信息
git config --global user.name “username”
git config --global user.email “email” - 配置当前项目config信息
git config user.name “username”
git config user.email “email”
- 初始化项目:git init
- 关联远端仓库: git remote add origin 地址
- 修改远端仓库地址:git remote set-url origin 新地址
- 取消关联远程仓库:git remote remove origin
拉取代码
- 第一次拉取代码: git pull origin master
- clone远端分支:
- git clone -b branch_name remote_repo
例如:
git clone -b branch_basic https://github.com/baiiu/ZhihuDaily.git - git clone remote_repo -b branch
例如:
git clone https://github.com/baiiu/ZhihuDaily.git -b branch_basic
- git clone -b branch_name remote_repo
- clone到指定目录中
git clone remote_repo file_dir
分支
-
开启分支:git checkout -b feature_one branch
-
合并分支到develop:
git checkout dev
git merge - -no-ff feature_one -m “description”(为了保证版本演进的清晰,我们希望采用这种做法,把feature_one分支 merge进 dev)
<<<<<<< HEAD //代表是当前所在分支的代码,即develop分支的
public boolean isRead = false;
=======
private int randomColor;
public int priority;
>>>>>>> feature_one,这里是在feature_one分支做的修改
-
推送分支到远端:git push origin branch_name
-
拉取远端分支:git checkout - -track origin/branch_name
-
关联远程分支:
git branch --set-upstream-to branch_name origin/branch-name
git push --set-upstream origin master -
取消和远端关联 :git remote rm origin
-
删除分支:git branch -d branch_name
git branch -D branch_name -
删除远端分支:
git push origin --delete branch_name -
从Tag上拆出分支:
git checkout -b branch_name tag_name -
查看分支间的不同
覆盖 git diff [branchA] [branchB] > a.txt
追加 git diff [branchA] [branchB] >> a.txt -
重命名分支
git branch -m oldName newName -
从某个commit上检出分支
git checkout -b<branch name>
<SHA1>
-
恢复误删分支
git log -g 或 git reflog 找到被删分支上的commit
git branch<branch_name>
<SHA1>
-
修改分支名称
git branch -m oldName newName
git push --delete origin oldName
git push origin newName
git branch --set-upstream-to origin/newName
修改和回滚
-
撤销工作区修改 git checkout – fileName 丢弃工作区内某一文件的修改
git checkout – . 丢弃工作区内所有的修改 -
撤销已添加到stage暂存区修改
git reset HAED fileName -
重命名文件
git mv old_file new_file,重命名只能文件,不能是目录 -
撤销已提交的修改,未推送到远端
git reset - -hard HEAD^
git reset - -hard HEAD commitId
git reset - -hard HEAD~5 -
重置指针位置:
git reset - -hard HEAD~
git reset - -hard HEAD commitId,git reflog 查看命令史,可以找到commitId -
远端回滚,简单粗暴:
git reset --hard HEAD^
git push origin master -f
删除
- 删除本地文件:git rm xxx
- 删除远端文件:git remote romve xxx
- 删除远端分支:git branch -r -d origin/branchName
- 删除远端 .idea文件: git rm -fr .idea
- 删除build文件:
git rm -fr */build/\*
- 删除.iml文件: rm -fr
*/*.iml
Tag
- 显示所有Tag: git tag
- 显示该Tag信息: git show v4.0
- 从Tag上拆出分支:git checkout -b branch_name tag_name
- 打Tag,并推送到远端:
git tag -a v4.0 -m “xxxx”
git push origin v4.0
git push origin - - tags - 删除该Tag,并在远端也删除:
git tag -d v4.0
git push origin :refs/tags/v4.0
git push origin - -delete tag tagName
推送代码:
- 第一次推送到远端仓库:git push -u origin master
- 第一次推送到dev分支:git push -u origin dev
- 再次推送到远端仓库主分支:git push origin master
- 推送到dev分支: git push origin dev
- 强制推送到远端某分支(有时候需要):git push -f origin branchName
查看分支状态
- 查看当前分支对应远端分支:
git remote show origin
git config --list
git branch -vv
stash命令
- git stash 暂存当前修改到暂存区
- git stash apply 取出暂存区中修改
- git stash drop 删除暂存区最新一条记录
- git stash pop 取出并删除该记录
- git stash clear 清空所有暂存区的记录
- git stash list 列出所有暂存区记录
git blame使用
- git blame filePath,找到目标代码改动,找到commit
- git show commit_id,查看commit msg
二分查找
找到第一个是坏的commit;
- git bisect start [终点] [起点]
如从当前开始: git bisect start HEAD commitId - git bisect good:表示当前commit是好的,向前排查
- git bisect bad:表示当前commit是坏的,向后排查
- git bisect reset:恢复到最初的结点
合并多个Commit: git rebase
分支上开发产生多个无效commit,合并到主分支前进行commit合并。
- git rebase -i commitId
- 修改相应的命令:
- pick修改为squash,即要重新编辑commit message
- pick修改为fixup,就使用pick的那个commit message
每次要按下esc
后输入:wq
进入下一步。
参考如何优雅地合并多个 Commit
- git reset HEAD~1
这个也很方便
修改git历史commit msg
- git rebase -i commitId
- 修改相应的命令:
- pick改为edit
- git commit --amend --message=“xxx” --author=“xxx” && git rebase --continue
摘取Commit: git cherry-pick
-
git cherry-pick commitId --> 摘取这个commit到当前分支上
-
git status --> show conflicts
-
修复后使用 git add .
-
git cherry-pick - -continue 提交这次摘取
-
git cherry-pick - -about 放弃这次摘取
-
git cherry-pick
<start-commit-id>
…<end-commit-id>
左开右闭 -
git cherry-pick
<start-commit-id>
^…<end-commit-id>
闭区间