GIT 服务器端:
git init --bare someRepo.git
获取master,此时客户端是没有代码的:(--bare 只克隆其仓库,不克隆工作空间)
git clone ssh://userName@so.me.i.p/path/to/repo/someRepo.git
追加代码,并且提交代码:
1 查看当前代码状态
git status
-----------------------------------------------
位于分支 master
初始提交
未跟踪的文件:
(使用 "git add <文件>..." 以包含要提交的内容)test.java
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
2 跟踪代码
git add
----------------------------------------------
此时没有任何效果
----------------------------------------------
git status
----------------------------------------------
位于分支 master
初始提交
要提交的变更:
(使用 "git rm --cached <文件>..." 以取消暂存)新文件: test.java
3 确认提交代码
git commit -m 'some comment'
---------------------------------------------
[master (根提交) fc307fb] some comment
1 file changed, 1 insertion(+)
create mode 100644 test.java
4.1 推送代码到服务器
git push
---------------------------------------------
voctrals@192.168.1.101's password:
对象计数中: 3, 完成.
写入对象中: 100% (3/3), 224 bytes | 0 bytes/s, 完成.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://voctrals@192.168.1.101/home/voctrals/GitStudy/gitstudy.git
* [new branch] master -> master
4.2推送本地分支到远程服务器
git push [-u] origin branch1 -- -u的意思是说提交之后立即关联,这个参数只有第一次提交的时候有意义,后面不应该存在
------------------------------------
voctrals@192.168.1.101's password:
Total 0 (delta 0), reused 0 (delta 0)
To ssh://voctrals@192.168.1.101/home/voctrals/GitStudy/gitstudy.git
* [new branch] branch1 -> bran[]h1git branch -r -- 查看远程分支
------------------------------------
origin/branch1
origin/master
回退到某一个版本号:
http://blog.csdn.net/pzhtpf/article/details/52212671
创建分支
1 查看分支
git branch -- 查看本地分支
-----------------------------------
* master -- *代表当前所在分支
git branch -r -- 查看远程分支
---------------------------------
origin/master
git branch -a --查看所有分支
-------------------------------
* master
remotes/origin/master
2 创建分支
git branch branch_name
---------------------------------
什么效果也没有
或者
git checkout -b branch_name
-------------------------------------
创建一个branch_name本地分支,创建分支之后,直接把指针指向新的分支
git branch -- 查看分支创建情况,多出来一个新创建的分支branch1
--------------------------------
branch1
* master
切换分支,切换分支的时候,本地的代码是会跟着切换的
当前在branch1上对代码的修改,当切换到branch2的时候,代码也是修改过的.当然前提是没有提交到本地服务器,不然的话代码已经和一个分支挂上关系了.
× 对文件进行了任何修改,修改并不属于任何一个分支
× 对文件的add,也不属于任何一个分支
× 对文件的提交是针对于一个分支的
git checkout branch_name
-------------------------------------
切换到分支 'branch1'
or
切换到分支 'master'
您的分支与上游分支 'origin/master' 一致。
切换分支提交代码
1 git status
2 git add
3 git commit
4 git pull
-------------------------------------------------
voctrals@192.168.1.101's password:
当前分支没有跟踪信息。
请指定您要合并哪一个分支。
详见 git-pull(1)。git pull <remote> <branch>
如果您想要为此分支创建跟踪信息,您可以执行:
git branch --set-upstream-to=origin/<branch> branch1
根据提示信息,可以了解到,我们这个分支尚未被跟踪,所以先让该分支被跟踪一下
4 git branch --set-upstream-to=origin/branch1 branch1 -- 让当前分支被跟踪
-----------------------------------------
还是没有什么效果
5 git push
-----------------------------------------
voctrals@192.168.1.101's password:
对象计数中: 3, 完成.
Delta compression using up to 4 threads.
压缩对象中: 100% (3/3), 完成.
写入对象中: 100% (3/3), 313 bytes | 0 bytes/s, 完成.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://voctrals@192.168.1.101/home/voctrals/GitStudy/gitstudy.git
fc307fb..56e5e89 branch1 -> branch16 git status
-----------------------------------
位于分支 branch1
您的分支与上游分支 'origin/branch1' 一致。
无文件要提交,干净的工作区7 查看两个分支的本地代码
voctrals@E420:~/gitstudy/gitstudy$ git checkout master
切换到分支 'master'
您的分支与上游分支 'origin/master' 一致。
voctrals@E420:~/gitstudy/gitstudy$ ls
test.java
voctrals@E420:~/gitstudy/gitstudy$ git checkout branch1
切换到分支 'branch1'
您的分支与上游分支 'origin/branch1' 一致。
voctrals@E420:~/gitstudy/gitstudy$ ls
test2 test.java
获取远程的,本地不存在的分支
git checkout branch1
直接获取某一个分支,本地还没有git仓库
git clone -b branchName ssh://someUser@so.me.i.p/path/to/repo/someRepo.git
删除本地分支(不能删除所在的分支)
git branch -d branchName
------------------------------------------------
warning: 将要删除的分支 'branch1' 已经被合并到
'refs/remotes/origin/branch1',但未合并到 HEAD。
已删除分支 branch1(曾为 56e5e89)。git branch -D branchName -- 当一个分支没有被合并到别的分支的时候,是不能删除的,可以换参数d为D即可。
-- 此功能适合那种试验性的小分支,实验结果不正常,或者实验取消的时候,删除分支
删除远程分支(有两种方式,不知道区别)
git push origin :branchName
---------------------------------------------------
voctrals@192.168.1.101's password:
To ssh://voctrals@192.168.1.101/home/voctrals/GitStudy/gitstudy.git
- [deleted] branch1
或者
git branch -r -d origin/branch1
----------------------------------------------
已删除远程跟踪分支 origin/branch1(曾为 fc307fb)。
删除本地修改
git status
-------------------------------------------
如果发现本地有不需要的修改,可以直接把当前代码恢复,使用checkout命令
git checkout -- file_name_with_path
------------------------------------------
voctrals@E420:~/ideaworkspace/oetcm$ git status
位于分支 chatroom-2.0
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动)修改: oetcm-service/src/main/java/com/mz/mycc/service/PublicCourseService.java
修改: oetcm-service/src/main/resources/sql/AccountMapper.xml未跟踪的文件:
(使用 "git add <文件>..." 以包含要提交的内容)oetcm-api/oetcm-api.iml
oetcm-api/src/main/resources/doc/apidoc/
oetcm-api/target/
oetcm-service/oetcm-service.iml
oetcm-service/target/
oetcm-util/oetcm-util.iml
oetcm-util/target/修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
voctrals@E420:~/ideaworkspace/oetcm$ git checkout -- oetcm-service/src/main/java/com/mz/mycc/service/PublicCourseService.java
voctrals@E420:~/ideaworkspace/oetcm$ git checkout -- oetcm-service/src/main/resources/sql/AccountMapper.xml
分支合并
git merge branchName -- 将制定分支的内容合并到当前分支
-------------------------------------------------
Updating d17efd8..fec145a Fast-forward readme.txt | 1 + 1 file changed, 1 insertion(+)
合并分支可能会失败,失败的时候,git会提示那些文件合并的时候失败了,需要自己去合并之后的文件中进行适当的修改。
OK,修改之后这个文件是未被跟踪的,所以需要再次add,commit
将一个分支中的部分内容合并到另外一个分支
voctrals@E420:~/ideaworkspace/oetcm$ git branch -- 获取当前所有分支
chatroom-2.0
* master
voctrals@E420:~/ideaworkspace/oetcm$ git checkout chatroom-2.0 -- 需要追加文件的分支
切换到分支 'chatroom-2.0'
您的分支与上游分支 'origin/chatroom-2.0' 一致。
voctrals@E420:~/ideaworkspace/oetcm$ git checkout master .gitignore -- 需要获取文件的分支,这里还需要指定需要的文件
voctrals@E420:~/ideaworkspace/oetcm$ git status
位于分支 chatroom-2.0
您的分支与上游分支 'origin/chatroom-2.0' 一致。
要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存)新文件: .gitignore
标签相关
1 当前提交创建标签
git tag tag_name --没有任何副作用
2 查看所有标签
git tag
-------------------------------------------------
apple
pear3 创建有备注的标签
git tag -a tag_name -m 'comment' -- 没有任何副作用
4 给过去的一次commit追加标签
git tag -a tag_name -m 'comment' commit_id
5 删除标签
git tag -d tag_name
6 推送标签到远程
git push origin tag_name
或
git push origin --tags
7 删除远程标签
git tag -d some_tag_name -- 先删除本地的tag
git push origin :refs/tags/some_tag_name -- 推送本地的删除到远程
8 获取指定tag处的代码
git checkout tag_name
这里有两种情况:
8-1, 如果checkout的这个tag,存在分支,那么直接checkout没有什么问题
记录一下,这里写的有问题,即使存在分支,也需要新建一个分支,下一步应该是去合并新建的分支和当前分支.
8-2,如果checkout的这个tag,不存在对应的分支,会有如下提示
voctrals@E420:~/gitstudy/gitstudy.git$ git checkout apple
Note: checking out 'apple'.You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:git checkout -b <new-branch-name>
HEAD 目前位于 1d61572... create readme file
这时,我们只需要git checkout -b new_branch_name tag_name即可.
fetch
ignore
临时存储
git stash -- 当分支需要切换的时候,当前分支有些内容不适宜提交的时候,可以先存储下来当前add的所有的东西,以保证当前分支是clean的
-------------------------------------------
保存工作目录和索引状态 WIP on dev: 8c6f380 after merge
HEAD 现在位于 8c6f380 after mergegit checkout someBranch -- 切换到需要对应的分支
git checkout -b bug-001 -- 切换出来一个分支,用来修复bug,add,commit等
git checkout someBranch -- 切换回原来的分支
git merge bug-001 -- 合并分支
--------------------------------------------
git checkout beforeBranch -- 切换到原来的分支
git stash list -- 查看当前的所有存储的修改列表
---------------------------------------------
stash@{0}: WIP on dev: 8c6f380 after merge
stash@{1}: WIP on dev: 8c6f380 after merge---------------------------------------------
git stash apply stash@{0} -- 把储存的修改拿出来,但是这种形式,存储列表中仍会保存当前修改
git stash drop stash@{0} -- 把储存的修改从列表中删除
---------------------------------------------
git stash pop stash stash@{0} -- 这种形式会将存储的修改取出来的同时,把列表中的内容删除掉
=============
git server 换地址
$ git remote set-url origin <new url>
Or modify your .git/config file.
After modified URL, it will be worked as before.
To Check remote URL, uses below command.
$ git remote -v
==================================
推送本地新项目到远程
需要首先在远程上创建一个git项目
mkdir someproject.git
cd someproject.git
git init --bare
这样就OK了。获取一下远程的url,一般为ssh://git@some.ip/somepath/someproject.git
在本地创建一个git项目,之后,
git remote add origin ssh://git@some.ip/somepath/someproject.git
之后就同上了
切换库,或者其它的原因导致服务器坏掉了,可以把本地的代码放到新的库上:
# 先和远程仓库合一下,后面的操作就一样了
git pull origin master --allow-unrelated-histories
git不显示中文路径
git config --global core.quotepath false
git pull 替换为 git fetch + git merge
git fetch origin master git log -p master..origin/master git merge origin/master
1,clone远程代码,只是把master弄下来,出现两个指针,一个指向master,一个指向origin/master。
2,远程被人提交,远程master前移,本地修改只是master指针前移,origin/master指针不动
3,fetch远程master分支到本地,origin/master指针前移