Git常用命令
git辅助命令
git config
git config 命令用于获取并设置存储库或全局选项。这些变量可以控制Git的外观和操作的各个方面。
语法简介
C:\Workspace\learn\test-git>git config
Config file location
--global use global config file
--system use system config file
--local use repository config file
-f, --file <file> use given config file
--blob <blob-id> read config from given blob object
Action
--get get value: name [value-regex]
--get-all get all values: key [value-regex]
--get-regexp get values for regexp: name-regex [value-regex]
--get-urlmatch get value specific for the URL: section[.var] URL
--replace-all replace all matching variables: name value [value_regex]
--add add a new variable: name value
--unset remove a variable: name [value-regex]
--unset-all remove all matches: name [value-regex]
--rename-section rename section: old-name new-name
--remove-section remove a section: name
-l, --list list all
-e, --edit open an editor
--get-color find the color configured: slot [default]
--get-colorbool find the color setting: slot [stdout-is-tty]
Type
--bool value is "true" or "false"
--int value is decimal number
--bool-or-int value is --bool or --int
--path value is a path (file or directory name)
Other
-z, --null terminate values with NUL byte
--name-only show variable names only
--includes respect include directives on lookup
--show-origin show origin of config (file, standard input, blob, command line)
描述
可以使用此命令查询、设置、替换、取消设置选项。
git功能命令
git rebase
git rebase 命令在另一个分支基础之上重新应用,用于把一个分支的修改合并到当前分支。官网解释:Reapply commits on top of another base tip
语法简介
usage: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] [<branch>]
or: git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
or: git-rebase --continue | --abort | --skip | --edit-todo
Available options are
-v, --verbose display a diffstat of what changed upstream
-q, --quiet be quiet. implies --no-stat
--autostash automatically stash/stash pop before and after
--fork-point use 'merge-base --fork-point' to refine upstream
--onto ... rebase onto given branch instead of upstream
-p, --preserve-merges
try to recreate merges instead of ignoring them
-s, --strategy ... use the given merge strategy
--no-ff cherry-pick all commits, even if unchanged
-m, --merge use merging strategies to rebase
-i, --interactive let the user edit the list of commits to rebase
-x, --exec ... add exec lines after each commit of the editable list
-k, --keep-empty preserve empty commits during rebase
-f, --force-rebase force rebase even if branch is up to date
-X, --strategy-option ...
pass the argument through to the merge strategy
--stat display a diffstat of what changed upstream
-n, --no-stat do not show diffstat of what changed upstream
--verify allow pre-rebase hook to run
--rerere-autoupdate allow rerere to update index with resolved conflicts
--root rebase all reachable commits up to the root(s)
--autosquash move commits that begin with squash
move commits that begin with squash!/fixup! under -i
--committer-date-is-author-date
passed to 'git am'
--ignore-date passed to 'git am'
--signoff passed to 'git am'
--whitespace ... passed to 'git apply'
--ignore-whitespace passed to 'git apply'
-C ... passed to 'git apply'
-S, --gpg-sign[=...] GPG-sign commits
Actions:
--continue continue
--abort abort and check out the original branch
--skip skip current patch and continue
--edit-todo edit the todo list during an interactive rebase
--quit abort but keep HEAD where it is
-
rebase合并提交记录
关键字: squash
关键字说明: 将当前提交与上一次提交合并(注意理解:个人理解为:第二次的提交只能合并到第一次提交上,依此类推)
为方便说明,我在当前的功能开发分支feature-1,上做三次提交模拟普通开发过程的提交,备注分别是:feature-1 commit-1,feature-1 commit-2,feature-1 commit-3如下图所示:
下面我们将第2次与第3次的提交合并到第一次的提交上。
首先在idea中打开命令行终端:
1.输入命令:git rebase -i HEAD~3
(3:是指我需要合并最近多少次提交,也就是版本。在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。)
2.在需要将本次提交合并到上一次提交的记录前将 pick 改为 s 或者 squash(示例是将 提交fcac3ae,5c81594 合并到 feb337b提交上),然后保存(按 Esc 键,输入:wq 回车,合并的过程可能会有冲突):
3.如果有冲突,需要修改,修改的时候要注意,保留最新的历史,不然我们的修改就丢弃了。修改以后要记得敲下面的命令:
git add ./git/src
git rebase --continue
如果你想放弃这次提交合并的话,执行以下命令:
git rebase --abort
如果没有冲突,会出现编辑提交日的志界面
4.此时可以使用
git log
命令查看提交记录与日志:5.将合并提交的结果push到远程分支,由于合并提交会更改HEAD信息,所以必须使用强制push
命令:
git push -f
-
rebase合并分支
关键字: --onto
关键字说明: 指定新的合并基点
为方便说明现在我在master上,做3次提交,模拟其他功能已合并到master
1.切换到feature-1分支上
2.在控制台输入合并 命令git rebase master
3.这个时候找到有冲突的文件,将冲突解决。然后将有冲突的文件add到git中git add ./git/src
4.再次查看feature-1的提交日志
git log
,大家可以看到feature-1的提交,已经是建立在master feature-60000之后了5.将rebase之后的feature-1分支push到远程分支,由于合并提交会更改HEAD信息,所以必须使用强制push命令:
git push -f
-
rebase修改提交内容
关键字: edit
关键字说明: 修改历史提交的数据
为了方便说明我们还是以feature-1分支作为示例,假设由于某个需求,我需要将 feature-1 commit-1-2-3 的提交数据进行修改,但是此时的feature-1 commit-1-2-3并不是最新版本
1.修改历史提交数据之前的日志和数据git log
2.使用
git rebase -i HEAD~N
(N:是指版本数,当然我们这里也就是2。在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。),会出现如下的操作界面3.将9acd2ff版本号前的pick改为 edit或者s,然后按 Esc键,输入:wq,保存
4.第3步的结果如下
5.现在我再最后追加一个输出
System.out.println("use rebase edit change committed content");
和一个文本文件gitamen.txt
6.将修改后的文件添加到git中:git add ./git/src
7.保存对这次提交数据的更改
git commit --amend
8.输入日志并保存(Esc键,输入:wq)
9.执行
git rebase --continue
命令10.解决冲突,再依此执行
git add ./git/src
和git rebase --continue
。这时不需要提交,也就是不需要在执行git commit --amend
,如果在中途要停止rebase操作,请执行命令git rebase --abort
,这样就可以抹去并停止在rebase的操作。11.查看提交记录
git log
12.push到远程分支,由于合并提交会更改HEAD信息,所以必须使用强制push命令:
git push -f
-
rebase批量修改历史提交日志
关键字: reword
关键字说明: 修改历史提交信息
为了方便说明我们还是以feature-1分支作为示例,现在的需求是将日志信息feature-1 edit-commit,add gitamen.txt file,change Git.java改为feature-1 reword committed log
1.执行命令git rebase -i HEAD~1
2.将 8496384 前的 pick 改为 r 或者 reword。然后按 Esc键,输入:wq,保存
3.填写新的提交日志信息feature-1 reword committed log。然后按 Esc键,输入:wq,保存
4.查看提交日志git log
5.将结果push到远程分支,由于合并提交会更改HEAD信息,所以必须使用强制push命令:git push -f
-
rebase删除历史纪录
关键字: drop 或者 直接删除所在的行
关键字说明: 删除历史提交记录
为了方便说明我们还是以feature-1分支作为示例,现在的需求是将feature-1 reword committed log和feature-1 commit-1-2-3 add a new file , modify Git.java对应的提交删除。
原始的提交记录如下
1.执行命令git rebase -i HEAD~2
2.在需要删除的版本前将pick 改为 drop 或者 d 或者 直接删除所在的行。然后按 Esc键,输入:wq,保存
3.查看日志
git log
4.将结果push到远程分支,由于合并提交会更改HEAD信息,所以必须使用强制push命令:
git push -f
git stash
git stash 命令用于将更改储藏在脏工作目录中。官网解释:Stash the changes in a dirty working directory away
语法简介
C:\Workspace\learn\test-git>git stash usage
usage: git stash list [<options>]
or: git stash show [<stash>]
or: git stash drop [-q|--quiet] [<stash>]
or: git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]
or: git stash branch <branchname> [<stash>]
or: git stash save [--patch] [-k|--[no-]keep-index] [-q|--quiet]
[-u|--include-untracked] [-a|--all] [<message>]
or: git stash [push [--patch] [-k|--[no-]keep-index] [-q|--quiet]
[-u|--include-untracked] [-a|--all] [-m <message>]
[-- <pathspec>...]]
or: git stash clear
暂时写到这儿,有空再更新