初始化库
新建文件夹,在文件夹内执行 git init 初始化(创建)一个git库
查看仓库所有文件状态
git status
查看修改了哪些文件
Innodev-E531@Innodev-E531-PC MINGW64 /d/zhangyadongIndividual/Test (master)
$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: src/main/java/com/test/interceptor/MyFilter.java -> src/main/java/com/test/interceptor/IPFilter.java
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/main/java/com/test/interceptor/IPFilter.java
modified: src/main/java/com/test/listener/MyListener.java
modified: src/main/webapp/WEB-INF/views/ipError.jsp
modified: src/main/webapp/WEB-INF/web.xml
Untracked files:
(use "git add <file>..." to include in what will be committed)
src/test/
检出仓库
git clone {path}
克隆一个仓库
创建一个本地仓库的克隆版本:git clone /path/to/repository
克隆远端服务器上的仓库:git clone https://www.github.com/xxxx.git
更新
(每次开发、提交之前建议都要更新远端仓库中的最新版本,避免引起冲突)
git pull
将远端仓库的内容更新到本地仓库,也可以理解为在本地的Workspace中获取(fetch)并合并(merge)远端仓库的改动
添加与提交
git add {fileName}
添加单一文件
git add .(git add --all)
添加所有文件(添加到本地缓存区)
git commit -m "{message}"
提交上一步(git add)修改的文件到本地仓库(注意是本地仓库,此时并没有和远端服务器进行交互)
git commit --verbose
verbose参数会列出diff的结果
替换本地改动(还原)
git checkout -- {filename}
将工作目录中的文件还原为HEAD中的最新内容(已添加到缓存区的改动,以及新文件,都不受影响)
如果想丢弃所有本地的改动与提交,可以到服务器上获取最新的版本并将本地主分支指向它(同步)
git fetch origin
git reset --hard origin/master
回滚commit
git log
查看commit记录
commit 8bb21d443c80f26fe16c0ce8119631b92fb044f0
Author: yadong.zhang <yadong.zhang0415@gamil.com>
Date: Wed Aug 17 11:04:11 2016 +0800
add Flow Chart
commit 1cb89020f7f0de4cd37a38249cb3264e9be100e3
Author: yadong.zhang <yadong.zhang0415@gamil.com>
Date: Wed Aug 17 10:51:12 2016 +0800
小改动
commit cbd5a1010215c37db960ca0ba85f150edb3ac8fb
Author: yadong.zhang <yadong.zhang0415@gamil.com>
Date: Wed Aug 17 09:13:59 2016 +0800
优化代码
commit a0f2afa7cf8de5a508800535ad2a95363a21094d
Author: yadong.zhang <yadong.zhang0415@gamil.com>
Date: Wed Aug 10 18:20:05 2016 +0800
删除不必要的代码
commit 4b222558ddfc18fb7e19af21711cf097407e081a
Author: yadong.zhang <yadong.zhang0415@gamil.com>
Date: Wed Aug 10 10:53:45 2016 +0800
update
git reset --hard commit_id
回滚到指定提交点
Innodev-E531@Innodev-E531-PC MINGW64 /d/zhangyadongIndividual/Test/doc (master)
$ git reset --hard 1cb89020f7f0de4cd37a38249cb3264e9be100e3
HEAD is now at 1cb8902 小改动
推送本地改动到远程服务器
git push -u origin master
将commit到本地仓库中的文件推送到远程服务器(master是默认分支,可以换成你想要推送的任何分支)
git push --force origin myfeature
强行推送
如果没有执行clone操作克隆远端仓库,但是还想将自己本地的仓库推送到远程服务器,可以使用:
git romote add origin {server}
git工作流
你的本地仓库都包含三部分:第一是你的工作目录(实际文件存放的地址);第二是缓存区(Index),如名字所表示的,它只是临时保存本地的改动;第三就是HEAD,指向你最近一次提交后的结果。
分支
分支是用来将特性开发绝缘开来的,通俗点讲就相当于生产线上的代码和测试线上的代码绝对不会存在于同一个分支(合并另算)。在github上创建仓库的时候,master是默认的分支。在平常开发中,一般来说都应该是在其他子分支上进行开发,完成后才会将它们合并到主分支上。
git checkout -b feature_x
创建feature_x分支并且切到feature_x分支上
git checkout master
切到主分支
git branch -d feature_x
删除feature_x分支
新建的分支别人是看不到的,除非推送到远端仓库:git push origin {branch}
合并
git diff {source_branch} {target_branch}
合并可能会造成冲突!改动之前,可以先查看下两端的文件差异
git merge {branch}
合并其他分支到当前分支
两种情况下,git都会尝试去自动合并改动,但并不是每次自动合并都会成功,也可能会导致冲突(多人同时操作一个文件)。有冲突发生时就需要手动修改这些文件以解决冲突。修改完后还需要执行如下命令将它们标记为合并成功:git add {filename}