git源碼閱讀

https://github.com/git-for-windows/git/issues/1854git

https://github.com/git-for-windows/git/pull/1902/filesgithub

分了2步操做,第一步是git reset,第二部是git cherry-pick --continuewindows

 

https://github.com/git-for-windows/git/blob/master/CONTRIBUTING.mdide

根據contributing.md,clone源代碼。而後切換到vs/master分支。函數

commit

查看commit.c中的源代碼中的prepare_to_commit函數,查看call hierarchy。(SHA-1: 66104e01a6ac313a8b9991d14658ca850b53598a)ui

merge.c中的cmd_merge函數(1274行),調用commit.c中的cmd_commit函數,  url

ret = cmd_commit(nargc, nargv, prefix);

commit.c中的cmd_commit函數(1584行),調用commit.c中的prepare_to_commit函數spa

if (!prepare_to_commit(index_file, prefix, current_head, &s, &author_ident)) { rollback_index_files(); return 1; }

 

merge.c源碼中1257行.net

if (abort_current_merge) { int nargc = 2; const char *nargv[] = {"reset", "--merge", NULL}; if (orig_argc != 2) usage_msg_opt(_("--abort expects no arguments"), builtin_merge_usage, builtin_merge_options); if (!file_exists(git_path_merge_head(the_repository))) die(_("There is no merge to abort (MERGE_HEAD missing).")); /* Invoke 'git reset --merge' */ ret = cmd_reset(nargc, nargv, prefix); goto done; }

 

cherry-pick

builtin\revert.c  第224行code

int cmd_cherry_pick(int argc, const char **argv, const char *prefix)

 

reset

builtin\reset.c  第287行

int cmd_reset(int argc, const char **argv, const char *prefix)

在merge.c中有一個地方在調用。這一塊代碼能夠參考

if (abort_current_merge) { int nargc = 2; const char *nargv[] = {"reset", "--merge", NULL}; if (orig_argc != 2) usage_msg_opt(_("--abort expects no arguments"), builtin_merge_usage, builtin_merge_options); if (!file_exists(git_path_merge_head(the_repository))) die(_("There is no merge to abort (MERGE_HEAD missing).")); /* Invoke 'git reset --merge' */ ret = cmd_reset(nargc, nargv, prefix); goto done; }
相關文章
相關標籤/搜索