赞
踩
一、Git、谁与争锋
git init
:可以让Git完成管理前的准备工作
repositry
(文档库),里面存储被管理的文件和文件内容,包括所有曾经被加入的历史版本.git
的子文件夹,默认它会被隐藏git help -a
:显示完整的指令列表
git init -help
:会显示该指令的网页说明文件\
结尾,按下Enter键,继续输入git add
:是准备把文件送进Git文档库,会把文件内容加入Git系统的索引git commit -m '这次的操作说明' --author='操作者姓名 <email 邮箱>'
git commit --amend -m '新的的操作说明' --author='操作者姓名 <email 邮箱>'
gitk
:启动图形查看模式exit
:退出Git Bush二、Git配置文件的妙用
git config -l
:显示当前Git的设置git config --system -l
:显示Git程序安装文件夹中的etc\gitcondig
文件内的设置git config --global -l
:显示登录账号的home directory
中的.gitconfig
文件内的设置git config (--global/--system) user.name '操作者姓名'
:把操作者的姓名指定在对应的配置文件中git config unset user.name
:删除配置文件中的设置项git config --global core.editor notepad
:修改默认的编辑器git diff
:对比这两个版本之间的差异,在git add
后执行git difftool
配置文件对比程序
git config diff.tool kdiff3
:为文件对比程序取名git config difftool.kdiff3.path " 执行文件路径"
:配置执行文件的路径git config difftool.prompt false
:关闭提示功能,可不要三、把文件存入Git文档库
tracked
)ignored
)untracked
)touch .gitignore
.gitignore
文件库内设置忽略大的文件.gitignore 123.txt
'#'
注释 *.txt
!
表示排除git rm --cached 文件名
:文档中还没有加入任何文件,git init
之后,还没有执行过git commit
git reset HEAD 文件名
:文档库中已经有文件,执行过git commit
命令四、比较文件的差异和从Git文档库中取回文件
git mv 原来的文件名 新的文件名
:会更改文件中的文件名,并记录在Git索引中只要执行git commit
就可以更新文档库git checkout 文件1 文件2
:从文档库中取出文件,文件夹中的文件会被取出的文件覆盖(避免这种情况,用git reset HEAD
清除Git索引)git stash save
:暂存文件夹中的文件状态git stash list
:显示暂存文件git stash pop/apply
:取出暂存文件,并且合并到当前文件夹中的文件git gc
:清理Git文档,以确保运行效率
'--aggressive'
:Git会用比较仔细的方式检查以及清理,但是需要比较旧的时间'--auto'
:Git会先判断文档库是否需要清理。如果情况还算良好,就不会执行清理的操作'--no-prune'
:Git不清楚文档库中不会用到的数据,只要整理它们即可五、Git程序项目管理的实践演练
git checkout HEAD .
:从Git文档库中取出所有的文件git add -A .
:Git会检查文件夹中是否有文件夹被删除。这些被删除的文件会在Git索引中标记,当执行git commit
指令的时候,被标记删除的文件也会从新的commit
节点中删除六、获取Git文档库统计数据
git log
:会按照时间顺序,从最近一次的commit
节点开始,往前列出每一次commit
的数据,包括标识符、执行人、日期和时间、以及说明
git log --author='A'
:筛选出A执行的commit
git log 文件1 文件2
:只显示改过某些文件的commit
git log --after(since)=' ' --before(until)=' '
:显示指定时间的commit
'--stat\--numstat\shortstat'
还可以显示每一个commit
的变更情况git shortlog
:会按照名字的顺序排序,列出每一个人执行commit
的次数和说明
--numbered/-n
,从高至低按序排列'--summary/-s'
,不需要显示commit
说明git ls-files
:会列出文档库中的文件列表
git ls-files | xargs wc -l
:计算文件中的代码行数git ls-files | xargs cat | wc -l
:计算函数的总和七、程序项目的分支(Branch)
git branch
:列出当前文档库中正在开发的所有分支
git branch 自己取的分支名称 commit节点标识符或是标签
:在Git文档库中创建分支
commit
节点标识符或是标签,就会从该节点长出分支commit
节点,就会从最新的commit
长出分支git checkout 分支名称
:切换当前操作的分支
git checkout -f 分支名称
:当Git要覆盖文件夹中的文件时,会检查该文件的内容是否已经加入文档库,如果还没有加入,Git会显示警告信息,并且停止执行,以免资料遗失。如果确定不想保留这些已经修改,却还没有加入文档库的文件,用该命令,Git会强制覆盖修改后的文件git checkout .
:用文档库中的文件覆盖文件夹中的文件gitk -all
:同时显示所有分支
gitk log --graph --oneline --all --decorate
'--graph'
:画出commit
节点的演进图'--oneline'
:用最精简的方式显示'--all'
:显示所有的分支'--decorate'
:表示分支的名称*
表示commit
节点git branch -d 要删除的分支名称
:要删除分支,必须先切换到另一个分支
git branch -D 要删除的分支名称
:在一般情况下,分支应该合并到另一个分支。如果要删除的分支还没有合并,Git会显示错误信息,并且停止删除分支的操作。要删除还没有合并的分支,可以使用上述的命令
git branch -m 新的分支名称
:如果想要更改分支的名称,必须先切换到该分支
git checkout HEAD^
:detached HEAD
状态,这时候HEAD
指向倒数第二个commit
节点,现在已经不属于任何一个分支
git checkout commit节点
:让文件夹中的文件变成指定的commit
节点的版本,会让当前分支的HEAD
指向该commit
节点,形成所谓的detached HEAD
状态git checkout commit节点 .
:让文件夹中的文件变成指定的commit
节点的版本,不会更改HEAD状态git add
和git commit
指令将修改后的文件加入文档库。这时候,会从当前所在的节点,长出一个没有名称的分支。必须执行gitk log --graph --oneline --all --decorate
,gitk -all
图形查看模式不会显示这个无名的分支处理无名分支
3-way merge
)法1:
/*1. 首先赋予这个无名分支一个名称*/
git branch 无名分支的分支名称
/*2. 切换到另一个分支*/
git checkout master
/*3. 在将这个无名分支删除*/
git brach -D 无名分支的分支名称
法2:
git branch 无名分支的分支名称
git checkout master
git merge 无名分支的分支名称
八、合并程序项目的分支和解决冲突
git merge 分支名称
:会把指定的分支,合并到当前Git工作中的分支git banch -d 分支的名称
:分支被合并之后,名称还是会继续存在,必须将被合并的分支删除git reset --hard HEAD^
:刚刚执行合并分支的操作,现在要恢复合并前的状态
HEAD
节点会有两个父节点,可以分别使用'HEAD^1'和'HEAD^2'
来指定,或是直接使用commit
节点的标识符来指定fast-forward merge
:这种合并是把分支的修改完全运用到master
分支,就像是让master
分支沿着另一分支’快进’。不会产生新的commit
节点,不会留下合并的记录;如果希望留下合并的记录,可以在执行合并时使用git merge --no--ff 分支名称
(commit
节点会自动产生)3-way merge
:把master分支最新的commit
节点的文件内容和另一分支最新的commit节点的文件内容合并,并产生一个新的commit
节点git merge
指令,Git会自动判断应该使用fast-forward merge
或是3-way merge
,除非加上'--no-ff'
选项3-way merge
的处理方式比fast-forward merge
复杂。因为fast-forward merge
的文件内容只会在一个分支中修改,另一个分支没有任何变动,所以保证一定可以合并成功;但是3-way merge
的情况是两个分支都修改了文件内容,如果修改的是同一个文件中相同的地方,就会造成’冲突’的情况git merge 分支名称
:报有冲突产生git status
:检查现在状态git diff
:修正所有冲突文件之后git add .
、git commit -m "操作说明"
、git branch -d 分支名称
git config --global merge.tool kdiff3
git config --global mergetool.kdiff3.path " 程序的路径 "
git config --global mergetool.prompt false//prompt设置项是设置Git在启动外部程序之前,是否要询问我们
git config --global mergetool.kdiff3.trustExitCode false//trustExitCode 是设置外部程序结束之后,Git是否直接用它的返回值来判断是否成功
git config --global mergetool.keepBackup false//keepBackup是设置决定是否要备份原来含有冲突标识的文件
git checkout master
git merge 被合并的分支名称
git mergetool
git commit -m "操作说明"
git branch -d 被删除的分支名称
git cherry-pick commit节点标识符或标签
:把某一个commit
节点的文件版本,合并到文件夹中的文件。在默认情况下,执行这个指令会创建一个新的commit
节点,如果不想要创建新节点,可以加上'-n'
选项。执行这个命令前,必须把修改的文件存入文档库
cherry-pick
指令需要执行合并,因此也会发生文件冲突的情况git status
:查看冲突的详细信息'git cherry-pick --abort'
git mergetool
)git add .
git cherry-pick --continue
git reset
指令,可以讲过Git文档库恢复到某一个旧节点的状态。如果加上'--hard'
选项,文件夹中的文件也会一起恢复git revert
:也可以文件夹中的文件恢复到某一个commit
节点的状态,不同的是,revert
不会删除Git文档库中的commit
节点。相反的,在修改文件夹中的文件之后,它会新增一个commit
节点
git revert commit节点
指令是回到指定的commit
节点的前一个节点的文件状态git reset --hard commit节点
:回到指定的commit
节点的文件状态git revert --abort
:取消revert指令九、使用Rebase指令更新分支的起始点
rebase
指令的功能是把另一个分支的修改运用到当前的分支,原来从commit
节点x
长出来的draft
分支,会变成从master分支最新放入commit
节点长出来。将主分支的修改,合并到开发中的分支git checkout 分支名称
git rebase master
:把原来的master
指令换成rebase
指令git mergetool
)git add .
git rebase --continue
git rebase --abort
:放弃这一次的rebase
操作,可以在还没有完车rebase之前,执行该命令,Git文档库就会恢复到还没有执行rebase
之前的状态git reflog HEAD或是任何分支的名称
:可以查询任何分支变动的历史记录
git reflog master
:显示master变动的历史记录。可以使用'master@{数字}'
来表示它所对应的commit节点git reflog
不带任何参数,就会列出HEAD变动的历史记录(git reset --hard HEAD@{数字}
回到执行rebase
之前)源于整理《完全学会Git·GitHub·Git Server的24堂课》
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。