常用的git命令
自己画的git命令思维图
只是大概总结了一下,还在补充中
本地和repository建立联接
第一次 git push 加 -u ,会将本地的master与远程的master关联起来。
git init
git remote add origin repositoryUrl
git add .
git commit -m "commit info"
git push -u origin master
重新设置仓库地址
git remote set-url origin repositoryUrl
本地分支与远程分支建立联接
本地分支newBranch(冒号前面)推到远程分支newBranch(冒号后面),若远程没有newBranch分支,会自动创建。
git checkout -b newBranch
git push origin newBranch:newBranch
merge和rebase的区别
-
合并分支,merge: resolve conflict , git add . 和 git commit -m ‘fix conflict’ 后,会新产生一个commit;rebase:resolve conflict,git add . 和 git rebase --continue,不会产生新的commit。
-
merge不会保留merge分支的commit。rebase会为原分支上每一个提交创建一个新的提交,重写了项目历史。
merge:
rebase:
-
git merge --no-ff(fast-farward merge),会直接将主分支指向需要合并的分支。使用–no-ff参数后,在主分支上生成一个新节点。
cherry-pick
将指定的提交(commit)应用于其他分支上。
将分支上的commit A合并到master上:
git checkout master
git cherry-pick hashA
合并多个commit:
git cherry-pick <HashA> <HashB>
// 合并后不包含commit A
git cherry-pick A..B
// 合并后包含commit A
git cherry-pick A^..B
submodule
- 添加第三方库
执行后会生成两个文件.gitmodules和第三方仓库文件
git submodule add sshUrl
- 第一次拉去代码后,初始化第三方库
git submodule init
git submodule update
- 批量更新第三方库
.gitmodules会根据path寻找所有的三方模块, 并在每一个模块中都执行 foreach后的命令。
git submodule foreach git submodule update
- 删除第三方库
git rm <submodule-name>
同时删除本地和远程分支
-d 的全写是–delete,当前分支必须从上游分支完全合并才能删除
-D 的全写是–delete --force,强制删除,无论当前分支是否合并
// 远程
git push --delete <remote_name> <branch_name>
// 本地
git branch -d <branch_name>
撤销和修改commit
// 会保留源码,只是将commit和index信息回退到了某个版本,默认--mixed
--mixed
// 源码也会回退到某个版本,commit和index都会回退到某个版本
--hard
// 保留源码,只回退到commit信息到某个版本,不涉及index的回退,如果还需要提交,直接commit即可
--soft
- 代码回滚到某次提交
git reset <commit_id>
- 撤销最新一次提交
// 两者等价
git reset HEAD~
git reset HEAD~1
- 修改commit信息
修改本地commit信息,还未提交到远程:
git commit --amend -m 'new commit message'
修改远程commit信息:
可以通过git push -f去强制覆盖,但是一般禁用,强制覆盖操作太危险
推荐通过rebase的方式去修改commit信息
// X表示落后于HEAD的提交次数,不填默认为1
git rebase -i HEAD~X
stash暂存
// 讲改变暂存
git stash
// 将暂存第一条推出
git stash pop
// 清空所有暂存
git stash clear
// 现实暂存列表
git stash list
// 删除第一条暂存
git stash drop stash@{0}
重命名分支
// 重命名某分支
git branch -m <old_name> <new_name>
// 重命名当前分支
git branch -m <new_name>