git学习2

[转-谢谢]

1仓库

1 克隆git库

open cmd 
cd F:
$ git clone git@192.168.1.4:fatcat/zbase.git
$ git status -s
$ git merge origin/master 

2 平时使用–仓库更新

; 右键: git Bash Here 直接切换路径.
$ git remove -v
$ git branch -a
$ git fetch
$ git merge origin/master
; 一般情况下只是更新 master分支.   

3 更新仓库.(master分支没有变,learnTemp2 “add readme8 from other computer”)

$ git fetch
;可以看到磁盘文件未发生变化.
$ git merge origin/master
;可以看到磁盘文件"仍然未"发生变化.

4 git更新指令(master分支有更新)

$ git fetch
; 可以看到磁盘文件未发生变化,需要合并
$ git merge origin/master
; 已经变了.
------------
$ git rebase
; First, rewinding head to replay your work on top of it...
; Fast-forwarded master to refs/remotes/origin/master.
------------
$ git rebase origin/master

5 更新远程其他分支

$ git branch -a
$ git fetch origin learnTemp
; From 192.168.1.4:gao/learnTest
; * branch            learntemp  -> FETCH_HEAD
; 更新下来了,但是看不见.
$ git branch -a
; 可以合并
$ git rebase
..??

2远程分支管理

1 创建新的远程分支

$ git checkout -b temp
$ git add readme6.txt
$ git commit -m"add readme6 "
$ git push origin temp:learnTemp
; git push [远程名] [local_branch_name]:[remote_branch_name] 
------再接着创建一个分支,会多2次提交,把temp的也算上了.
$ git checkout -b temp2
$ git add readme7.txt
$ git commit -m"add readme7"
$ git push origin temp:learnTemp2

2 删除远程分支

$ git remote -v
$ git branch -a
$ git push origin :servBranchForDel
; git push [远程名] :[remote_branch_name] ;注意冒号前的空格.
$ git push origin :learnTset

3 远程其他分支并合并到master

$ git remote -v            ;查看远程连接
$ git branch -a            ;查看远程分支
$ git checkout -b temp(和远程名一样最好:learnTest)  origin/learnTest
$ git branch 
; 合并分支
$ git checkout master      ;切换到master
$ git merge --no-ff -m" merge temp(origin/learnTest) To master" temp
$ git branch -d temp
$ git barnch
$ git status -s

4 多人协作–解决冲突

; 比如其他人修改master分支的readnme9.txt了。现在我也修改了并要提交
$ git push origin master
; 出现错误。error: failed to push some refs to 'git@github.com:michaelliao/learngit.git'
; git pull 拉取最新的到本地,合并失败需要下面紧跟的指令。
$ git branch --set-upstream master origin/master
; Branch dev set up to track remote branch dev from origin.
$ git pull
; 会提示解决冲突:Automatic merge failed; fix conflicts and then commit the result.
; 需要手动修改冲突的文件 readme9.txt.
$ git add readme9.txt
$ git commit -m "merge confict readme9.txt"
$ git push origin master   ;

5 模拟两个人同时对仓库更新.(更新learnTemp2分支)

$ git clone git@192.168.1.4:gao/learnTest.git  ;克隆下来的往往是master分支。
;从另一台电脑上 clone 仓库,发现克隆到的只是master分支。(文件里没有readme6.readme7)
$ git remote -v        
$ git branch -a        
$ git checkout -b temp2  origin/learnTemp2
$ git status -s
; 磁盘完成操作:增加 readme8.txt
$ git add --all
$ git commit -m" add readme8.txt" 
$ git push origin temp2:learnTemp2
; 可以到服务器看到分支 learnTemp2 更新了.
; 完成以后可以删除分支.
$ git checkout master 
$ git barnch -D temp2
; 查看状态--推送master(如果master没有干什么),服务器不会显示这次提交。
$ git status -s
$ git push origin master 
; Everything up-to-date.

6 追踪分支:更新远程分支方法二

; 切换到远程分支
$ git checkout --track origin/learnTemp2_1
$ git add --all
$ git commit -m " add 1234 文件夹"
$ git push 
; 稍等刷新发现远程已经更新了.

7 追踪分支:下面开始删除1234文件夹

$ git checkout --track origin/learnTemp2_1
; fatal: A branch named 'learnTemp2_1' already exists.
; 因为上面已经创建了一个'追踪分支',所以再次创建就已经存在了.
; 假如此时你切换到其他分支干活了,要切换回来,直接按本地命令执行。
$ git checkout learnTemp2_1
$ git rm -rf 1234
; rm '1234/readme3.txt'
; rm '1234/readme4.txt'
$ git push
-----此时查看分支
$ git branch -a
; * learnTemp2_1
; learntemp
; master
; temp
; remotes/origin/HEAD -> origin/master
; remotes/origin/learnTemp2_1
; remotes/origin/learntemp
; remotes/origin/master

8 追踪分支:合并远程分支learnTemp2_1 到 learnTemp

$ git branch -a
$ git checkout --track origin/learnTemp2_1
$ git checkout --track origin/learnTemp
$ git merge -m" 合并 temp2_1" learnTemp2_1
$ git push
$ git push origin :learnTemp2_1
$ git branch -d learnTemp2_1
$ git branch -a

9 删除远程分支上的文件。

$ git branch -a
$ git checkout -b temp origin/learnTemp
$ git rm readme3.txt
$ git status -s
$ git commit " del readme3.txt"
$ git push origin temp:learnTemp
$ git branch -d temp

发现远程基本都是更新到本地,修改 ,完成后再推到远程,对远程做修改(如删除分支).


3 工作区 和 暂存区 –文件删除

; '工作区' : 在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区.
; '暂存区'的概念.
; '版本库' : 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
; 廖雪峰 老师的图描述的很清楚.
; 注意:放在工作区的文件在(没有被任何分支提交前,切换分支的时候一直存在(磁盘上或者git status 查看)
    新建一个空文件夹,git status -s 查看时无反应.

1 删除文件

1 从工作区删除 “未提交” 的文件
$ rm filename
$ rm -rf directory
$ git rm errlook.exe       ;fatal: pathspec 'errlook.exe' did not match any files
2 add后未提交
$ git rm errlook.exe
    ; error: the following file has changes staged in the index: errlook.exe
    ; (use --cached to keep the file, or -f to force removal)
$ git rm --cached errlook.exe
$ git status           ; ??errlook.exe  
$ git ls-files             ; 已经不包含。
--或者
$ git rm -f errlook.exe ; 强制删除。
-------
$ rm 已经不能删了,提交时会提交的。
3 分支里的: 从工作区和暂存区同时删除文件。
$ git rm filename
$ git rm –r directory      ;从仓库中删除文件夹
$ git rm -rf directory
$ git commit -m"  "
; 提交前发现删错了
$ git checkout -- test.txt
; 提交后发现删错了
$ git reset --hard HEAD^
3 分支里的: 从分支删除,工作区保留。
$ git rm --cached errlook.exe
; rm 'errlook.exe'
$ git ls-files
; diy.chm
; readme4.txt
; readme5.txt
; readme6.txt
$ git status -s 
; D  errlook.exe
; ?? errlook.exe
$ git commit -m " del errlook"
; [learntemp 46723cc]  del errlook
; 1 file changed, 0 insertions(+), 0 deletions(-)
; delete mode 100644 errlook.exe
$ git status -s 
?? errlook.exe
------
$ rm errlook.exe ; 即便提交后切换分支后还会有,可见不会删除。
$ git ls-files

2 重命名文件

1 工作区未add
$ git status -s
; ?? diy1.chm
; $ git mv diy1.chm diy2.chm ; fatal: not under version control.
---------
$ mv diy1.chm diy2.chm     ;改名
$ git status -s
; A  diy3.chm
2 add后未提交
$ git add --all
$ git status -s 
; A  diy2.chm
$ git mv diy2.chm diy3.chm ;改名
-------
$ mv diy3.chm diy4.chm
$ git status -s
; AD diy3.chm
; ?? diy4.chm               ;重新复制了一个到diy5 到工作区.
3 分支里的
$ git mv diy.chm diyVir.chm ;改名
$ mv diy3.chm diy5.chm         ;重新复制了一个到diy5 到工作区.

3总结:add后就被git接管了,$ git ls-files 就会有显示,应该用 $ git xx 指令.

#git commit –a –m “修改说明”
如果觉得刚提交的“修改说明”写得不够好,可输入以下命令调整
$ git commit --amend
显示最后一次 commit 修改的内容:
$ git show

4 版本回退

1 工作区对文件修改还没有add
$ git checkout --readme.txt
2 已经add了还未commit
$ git reset --hard HEAD^
$ git checkout --readme.txt
3 切换到相应分支
$ git log --pretty=oneline  或者 git reglog 
$ git reset --hard HEAD^
$ git reset --hard commit_id
4 只回退一个文件
$ git fetch 
; 修改了好几个文件。其中有个是不需要修改的。单个文件回退
$ git checkout -- bin/zbase/ps08.vdb
$ git checkout --bin/zbase/ps07.vdb                ;error : 注意中间的空格。
$ git status -s 
; 所有的都回退
$ git reset --hard HEAD^ (or commit)
$ git status -s 

回退已经提交的修改。

用暂存区覆盖工作区 git checkout -- file 可以丢弃工作区的修改
用分支覆盖暂存区 git reset HEAD file 可以丢弃暂存区的修改

4 推送到远程了.

5 git rebase

; readme10.txt:输入 " printf("master:001"); "
$ git add --readme10.txt
$ git commit -m "master 001 "
; readme10.txt:继续输入 " printf("master:002"); "
$ git add --readme10.txt
$ git commit -m "master 002 "
$ git log      ; master 001 --> master 002

; 切换分支
$ git checkout -b topic

; readme10.txt:输入 " printf("topic:001"); "
$ git add --readme10.txt
$ git commit -m "topic 001 "
; readme10.txt:继续输入 " printf("topic:002"); "
$ git add --readme10.txt
$ git commit -m "topic 002 "
$ git log  ;topic 001 --> topic 002  / master 001 --> master 002

$ git checkout master 
; readme10.txt:输入 " printf("master:003"); "
$ git add --readme10.txt
$ git commit -m "master 003 "
; readme10.txt:继续输入 " printf("master:004"); "
$ git add --readme10.txt
$ git commit -m "master 004 "
$ git log 

$ git checkout topic
$ git rebase master
; git rebase 
; 可能会遇到类似冲突的。先手动解决。完了需要add
$ git add --all
$ git rebase --continue
$ git log      ;master 001 --> master 002-->master003-->master004-->topic001-->topic002
; 从最后的结果看(分支结构图):相当于先更新主分支master,完了更新topic分支。(不是按时间)

6 git commit

; 提交的时候没输入 -m"." 会自动进入vim窗口.
; 下移光标到~ 或者# 的最后一行,输入 your commit.
; 1 esc
; 2 :
; 3 wq or q! 退出

按i然后写入,写入后按esc键,然后输入:wq
再输入q!或wq!(不保存改动,wq!是保存文件的写入修改)退出

7 add 目录

使用git add dirName/files的方式添加文件
如果提示失败请用带-f 参数来添加文件

8 git pull –rebase origin master

    可以通过如下命令进行代码合并【注:pull=fetch+merge]
    $ git pull --rebase origin master
    如果提示合并失败,是由于本地有修改的还未保存(正好是你不想上传的)
    $ git stash
    $ git pull --rebase origin master
    $ git status -s
    $ git push origin BranchName
    $ git status -s
    $ git stash list
    $ git stash clear

9 git mv

    $ git mv filefrom fileto  
    相当于手动从src文件夹剪贴到dest文件夹,并提交.
    也相当于更改名字功能。
    ======================
    $ mv filefrom fileto
    $ git rm filefrom
    $ git add fileto
    用git status -s 可以查看状态为 R(绿)

10 git GUI

-1 在带有.git的工程目录下右键(git GUI)
-2 左上角框显示已修改文件,左键单击文件前图标==add到左下角。
-3 左键单击文件前图标==取消add
-4 右下角 添加注释-commit.
-5 右上角显示文件的修改内容.
--------------------------------------------
-1 Repositry-->visual P_0627's history.

$ vi

$ vi readme10.txt 命令修改的。

转-谢谢

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值