git command

git 常用命令:

  • git stat
  • git command
  • git whatchanged
  • git show
  • git checkout
  • git reset
  • git commit
  • git diff/apply
  • git clean
  • git branch
  • git log
  • git cherry-pick
  • git rebase
  • git merge

查看改动文件 git status 未add

1
2
3
4
5
6
7
8
9
10
11
[ligang@yfslcentos71 hgdb-9-15]$ git status 
# On branch ora-fun
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: src/backend/utils/adt/oracle_compatibility/hgdbfuncs_oracle.c
#
no changes added to commit (use "git add" and/or "git commit -a")
[ligang@yfslcentos71 hgdb-9-15]$ git add src/backend/utils/adt/oracle_compatibility/hgdbfuncs_oracle.c
[ligang@yfslcentos71 hgdb-9-15]$ git commit -m "删除文件注释"

修改最后一次提交作者信息

修改最后一次提交
1
git commit --amend --author="ligang <ligang@highgo.com>"
连续几次
1
git rebase -i HEAD~3

将pick修改为edit

1
2
3
4
5
Stopped at 230fe3404df2790712209e8797923d6af47a42c7... add content
You can amend the commit now, with
git commit --amend
Once you are satisfied with your changes, run
git rebase --continue

此时,用户首先要使用git commit –amend -author修改该提交的作者信息,接着执行git rebase –continue继续修改下一个提交:

1
2
$ git commit --amend --author="Dennis <dennis@top500corp.com>" --no-edit
$ git rebase --continue

依次修改即可

git whatchanged –stat 每次修改的文件列表, 及文件修改的统计 已经add

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[ligang@yfslcentos71 hgdb-9-15]$ git whatchanged --stat 
commit 5afb2d3426637fedb1fe6b5fa525091028005eed
Author: ligang <ligang@highgo.com>
Date: Sun Sep 16 13:35:33 2018 +0800

删除文件注释

src/backend/utils/adt/oracle_compatibility/hgdbfuncs_oracle.c | 2 --
1 file changed, 2 deletions(-)

commit 593a62120591211eeaf598e059ec67f9c079dd39
Author: ligang <ligang@highgo.com>
Date: Sun Sep 16 13:25:02 2018 +0800

修改完成

src/backend/parser/parse_node.c | 26 ++++++++++++++++++++++----
src/bin/initdb/initdb.c | 2 ++
2 files changed, 24 insertions(+), 4 deletions(-)

查看Commit改动 git show

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[ligang@yfslcentos71 hgdb-9-15]$ git show  src/backend/utils/adt/oracle_compatibility/hgdbfuncs_oracle.c
commit 5afb2d3426637fedb1fe6b5fa525091028005eed
Author: ligang <ligang@highgo.com>
Date: Sun Sep 16 13:35:33 2018 +0800

删除文件注释

diff --git a/src/backend/utils/adt/oracle_compatibility/hgdbfuncs_oracle.c b/src/backend/utils/adt/oracle_compatibility/hgdbfuncs_oracle.c
index ae6f262..ee61b5d 100644
--- a/src/backend/utils/adt/oracle_compatibility/hgdbfuncs_oracle.c
+++ b/src/backend/utils/adt/oracle_compatibility/hgdbfuncs_oracle.c
@@ -1170,12 +1170,10 @@ Datum orafnp_decode(PG_FUNCTION_ARGS)
if (!OidIsValid(resulttype))
elog(ERROR, "could not determine data type of decode() input");

- //ligang_change_begin
if( 4 == nargs && UNKNOWNOID == searchtype)
{
searchtype = TEXTOID;
}
- //ligang_change_end

if (nargs % 2 == 0)
{

放弃本地所有修改 git checkout . 未使用 git add

1
git checkout -- filename  ## -- 指定当前版本, 可以指定commit id;

放弃已经缓存的修改 git reset 使用 git add .

1
2
可以使用  git reset HEAD filepathname (比如: git reset HEAD readme.md)来放弃指定文件的缓存,
放弃所有的缓存可以使用 git reset HEAD .

撤销提交的Commit

1
git reset --options HEAD~n
  1. –mixed

    不删除工作空间改动代码,撤销commit,并且撤销git add .

  2. –soft

    不删除工作空间改动代码,撤销commit,不撤销git add .

  3. –hard

    删除工作空间改动代码,撤销commit,撤销git add .

推回 commit 状态 已经使用add .

1
2
git reset --hard HEAD
git reset --hard commitid

将commit id 作为分支:

1
git checkout -b ligang-read   commit`id

文件diff

1
2
3
4
5
git diff ## 可以对比分支;
git diff brach-name > ../change.diff


git apply --check ../change.diff ## 检查diff是否可用
对比不同commit的文件
1
git diff hash1 hash2  filename

清除未识别 - 恢复原始

1
2
git checkout .
git clean -d -fx

重命名分支:

1
git branch -m oldName newName

删除远程分支

1
git push --delete origin oldName

把修改后的本地分支 与 远程分支关联

1
git branch --set-upstream-to origin/newName

查看文件所有提交历史 git log -p

1
git log -p  fileName

追踪函数在git历史中的变化;

1
git log  -L :checksum_bctlist:src/backend/postmaster/bct.c

合并commit id:

1
git rebase -i <startpointer> <endpointer>
1
git rebase -i HEAD~n   ##n 代表要合并的commit数目;

可以只写startpointer ; 在编辑合并界面, 进行pick sque 操作;

合并某个分支上的单个commit

dd2e86 - 946992 -9143a9 - a6fd86 - 5a6057 [master]

​ \

​ 76cada - 62ecb3 - b886a0 [feature]

feature 分支上的commit 62ecb3 非常重要,它含有一个bug的修改,或其他人想访问的内容。无论什么原因,你现在只需要将62ecb3 合并到master,而不合并feature上的其他commits,所以我们用git cherry-pick命令来做:

1
2
3
git checkout master

git cherry-pick 62ecb3

现在62ecb3 就被合并到master分支,并在master中添加了commit(作为一个新的commit).

合并某个分支的一系列commit;

合并单个commit可能并不满足, 需要合并一些列相连的commits; 这种情况需要使用rebase.

dd2e86 - 946992 -9143a9 - a6fd86 - 5a6057 [master]

​ \

​ 76cada - 62ecb3 - b886a0 [feature]

首先需要基于feature创建一个新的分支,并指明新分支的最后一个commit:

1
git checkout -b newbranch 62ecb3

然后,rebase将这个新的分支commit合并到master( –onto masdter). 76cada^ 指明你想从哪个特定的commit开始。

1
git rebase --onto master 76cada^

得到结果, 就是feature分支的commit 76cada ~62ecb3 都被合并到了master分支。

Merge 合并分支

git merge命令用于合并指定分支到当前分支。 合并后,在查看readme.txt的内容;

欣赏此文? 求鼓励,求支持!