Git 常用命令汇总

2020-04-01  本文已影响0人  林子er

分支的三个版本:

仓库与版本库:

可理解为:仓库 = 版本库 + 工作区。版本库即 .git 文件夹内容,版本库以外的都是工作区内容。

工作区、暂存区、版本区:

.git 目录概览:

本地仓库与远程仓库:

基于远程仓库的分支创建本地分支:

  1. git fetch:将 远程仓库分支 fetch 到本地的远程仓库快照中;
  2. git checkout branch-name:自动基于 origin/branch-name 快照创建本地分支并切换到该分支;

基于 master 创建本地分支并推送到远程仓库:

  1. git checkout master:切换到 master 分支;
  2. git pull --rebase :更新 master 分支到最新版本;
  3. git checkout -b branch-name:基于 master 创建开发分支;
  4. git add . & git commit -m "commit reason",提交修改;
  5. git push -u origin branch-name:将该分支推送到远程并在两者之间创建关联(这样后面就可以直接执行 git push 推送分支);

git pull 的两种模式:rebase 和 merge

合并分支:

  1. git pull --rebase,同步当前分支;
  2. git checkout test,进入 test 分支;
  3. git pull --rebase,同步 test 分支;
  4. git merge --no-ff feature-order,将 feature-order 合并到 test 分支;
  5. git push,推到远程;

分支合并的问题:

git diff:

撤销修改:

合并 commit:

合并本地多次 commit 为一条 commit:
1. git rebase -i HEAD~4
2. 弹出文本,将第二行开始的pick改为s(或squash)
3. 保存,退出
4. 推到远程:git push -f

对比文件修改历史:

查看某个文件最新代码中每行是由谁修改的(以及在哪次提交中修改的):
git blame filename

历史日志 log:

格式化显示日志:

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
可设置别名:
git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative”

删除 untracked files

git clean -f
连 untracked 的目录也一起删掉
git clean -fd

cherry-pick

在分支 A 做了些修改并提交后,想把这些修改应用到分支 B,但又不能直接 merge A 到 B,又不想手动 copy,此时可以用 cherry-pick:

git checkout B
git cherry-pick commitid-from-A

撤销合并:

  1. 查看合并提交详情:git show mergecommitid,会有如下一行:Merge: 022ff6f b2cd947,其中022ff6f和 b2cd947分别是两个分支合并前最近提交的commitId。
  2. 撤销合并时用-m指定需要以谁为准(主干mainline):
    git revert -m 1 mergecommitid,这样就回退到 022ff6f身上(丢弃掉被合并分支的一系列提交)。
  3. 撤销合并前用 git log —graph 能很清晰的看出分支合并关系以及将要撤销掉的提交系列。
  4. 一般情况下,我们都是错误合并后需要撤销到合并之前的状态,因而一般都是 git revert -m 1 …

删除本地分支:

git branch -D branch-name

删除远程分支:

git push origin :branch_name

git push --delete origin branch_name

基于远程分支创建本地分支:

git checkout -b localbranch origin/remotebranch 会创建本地分支localbranch并追踪到远程分支。
基于本地分支创建(如基于本地 master)则不会追踪任何远程分支,此时要用 git push -u origin localbranch:remotebranch 推送并追踪。

提交:

git commit -am '…'
-a:add 将未暂存的文件也提交。

代码评审:

gerrit
或者gitlab的merge request

git flow:

介绍:http://nvie.com/posts/a-successful-git-branching-model/
安装: apt-get install git-flow

批量删除分支:

从仓库中删除已跟踪的文件(将文件变成untracked,不跟踪):

删除远程不存在的“本地远程分支“:

很多时候其他人删除了远程分支,但我们自己电脑上还有一大堆 origin/... 这些“本地远程分支”,可执行以下指令同步删除:
git remote prune origin 或者git pull -p

同时推送到多个源:

git remote set-url --add --push origin https://github.com/linvanda/wecarswoole.git
这样 git push 的时候就会 push 到多个源。

换行符问题(mac、windows、linux混合开发时可能遇到)

其它实践问题:

上一篇 下一篇

猜你喜欢

热点阅读