多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
Git基于命令行的常规操作  初始化本地git环境 #!/bin/bash username=$1 email=$2 git=/usr/bin/git if [ $# -ne 2 ];then echo $"Usage:$0 <Username> <Email>" exit 2 fi $git config --global user.name "$username" $git config --global user.email "$email" $git config --global color.ui true $git config --global alias.olog "log --pretty=oneline" $git config --global alias.plog "log -p" 说明:SHA1:是git 对象中的40位hash编码数  文件提交 Git add index.html(多个文件,就用点号.) Git commit –m “add index.html”  文件重命名 [root@localhost test]# git mv pay.html pay.php [root@localhost test]# git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) renamed: pay.html -> pay.php  撤销工作区的修改 git checkout -- news.html  从暂存区中删除,工作目录保留 git rm --cached test.bin  撤销提交到工作区(版本回退到工作区) git reset --mixed HEAD^ 或者 git reset --mixed SHA1  撤销提交到暂存区(版本回退到暂存区) Git reset –soft HEAD^ 或者 git reset –soft SHA1  将工作区、暂存区和版本库恢复到指定版本 [root@localhost test]# git reset --hard cd6495c HEAD is now at cd6495c news01.html (执行这个操作,做好在其他窗口执行git log –oneline)  查看某个文件的散列值和版本库里的内容 [root@localhost test]# git hash-object -w about3.html 641d57406d212612a9e89e00db302ce758e558d2 [root@localhost test]# git cat-file -p 641d57 111 222 333  查看某个文件是谁提交或谁修改的 作用:查看文件内容是谁添加 案例:我想查看about3.html这个文件第二行是谁提交的 [root@localhost test]# cat about3.html 111 222 333 [root@localhost test]# git blame about3.html -L 2,+1 400fa95a (louis 2018-04-19 15:52:20 +0800 2) 222  查看某个文件的修改历史 git log -C news.html  提交查找 [root@localhost test]# git grep --name-only news (查看包含news的文件名) news.html news01.html [root@localhost test]# git grep -n news (查看包含news的文件名,并显示该内容在第几行) news.html:1:news center news01.html:1:news center 分支管理  本地新建分支 [root@localhost test]# git branch dev [root@localhost test]# git checkout dev Switched to branch 'dev' 注意:我们可以基于任意一次提交来创建分支 [root@localhost test]# git log --oneline dd97293 rename pay.html pay.htm cd6495c news01.html b20d55e add detail.html 400fa95 squash commit about3.html c9bd929 abount2 bbe4912 about 7fecdff pay 9770bad news 72dc15a first commit [root@localhost test]# git branch pay 7fecdff [root@localhost test]# git checkout pay Switched to branch 'pay' [root@localhost test]# ll total 12 -rw-r--r--. 1 root root 0 Apr 23 13:16 clib.a drwxr-xr-x. 2 root root 45 Apr 23 13:19 doc -rw-r--r--. 1 root root 31 Apr 19 16:11 index.html -rw-r--r--. 1 root root 12 Apr 23 14:53 news.html -rw-r--r--. 1 root root 26 Apr 23 16:27 pay.html -rw-r--r--. 1 root root 0 Apr 23 10:23 test.bin -rw-r--r--. 1 root root 0 Apr 23 13:14 test.o  删除分支 对于已经合并的分支 git branch –d dev 对于没有合并的分支 git branch –D dev  分支重命名 git branch –m dev Dev  查看哪些分支没有被合并 Git branch –no-merged  分支储藏 作用:当你正在一个分支上写代码,但是此时突然有个紧急事情需要处理,然后当前分支上的代码又不能提交,这个时候就会用到储藏的功能 [root@localhost test]# touch stash.txt [root@localhost test]# echo "statsh:add1" >> stash.txt [root@localhost test]# git add stash.txt [root@localhost test]# git stash (把之前没有提交的代码暂存起来) Saved working directory and index state WIP on dev: dd97293 rename pay.html pay.htm HEAD is now at dd97293 rename pay.html pay.htm [root@localhost test]# git checkout -b bug (然后切换到其他分支,开始修复bug,修复完毕后,合并到主分支) Switched to a new branch 'bug' [root@localhost test]# git checkout dev (bug修复完,并合并到主分支后,然后再切换到dev分支,开始之前的开发) Switched to branch 'dev' [root@localhost test]# git stash pop 弹出 [root@localhost test]# git stash list  如果不知道想要恢复分支的散列值,可以通过reflog [root@localhost test]# git reflog dd97293 HEAD@{0}: checkout: moving from bug to dev dd97293 HEAD@{1}: checkout: moving from dev to bug dd97293 HEAD@{2}: checkout: moving from master to dev  合并分支(merge) 一) 快进式合并 [root@localhost test]# git branch -a bug * dev master pay [root@localhost test]# git commit -m "add stats" [dev 1cef480] add stats 1 file changed, 1 insertion(+) create mode 100644 stash.txt [root@localhost test]# git checkout master Switched to branch 'master' [root@localhost test]# git merge dev Updating dd97293..1cef480 Fast-forward stash.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 stash.txt 二) 合并提交 场景:当主分支和dev分支同时又内容提交的时候,我们需要把dev分支合并到master分支,这个时候使用git merge,就会生成一个新的commit对象 Git merge dev  压合合并 场景:将一个分支上的所有历史提交合并成一个提交,然后合并到另一个分支,一般用于修改bug或某个小型功能分支 git merge –squash bug git commit  分支衍合 场景:基于某个开源软件做二次开发。当我们在基于开源软件做二次开发的时候,这个时候开源软件master分支也在不断的更新,此时我们需要使用开源软件的master分支,我们就可以通过git rebase把master分支合并到我们的分支上 1)先切换到自己的分支(dev) 2)Git rebase master  推送分支到远程 [root@linux7-node2 app01]# git checkout dev Switched to branch 'dev' [root@linux7-node2 app01]# git push origin dev:dev Counting objects: 4, done. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 293 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@git.51yuki.cn:java01/app01.git * [new branch] dev -> dev  拉取远程分支并创建本地分支 [root@linux7-node2 app01]# git fetch origin bug:Newbug (远程分支bug,本地分支Newbug) 该方法本地不会自动切换到Newbug分支  基于本地分支建立一个于远程分支的关联 [root@linux7-node2 app01]# git branch -a Newbug * dev master remotes/origin/dev remotes/origin/master [root@linux7-node2 app01]# git checkout Newbug [root@linux7-node2 app01]# git push origin Newbug:bug Everything up-to-date [root@linux7-node2 app01]# git branch -a * Newbug dev master remotes/origin/bug remotes/origin/dev remotes/origin/master