git廖雪峰

所有的控制版本系统,只能跟踪文本文件的改动(TXT文件,网页,程序代码等)

 

而图片,视频这些二进制文件,虽然可由版本控制系统管理,但没法跟踪文件的变化。

 

创建版本库

  • mkdir learnGit
  • cd learGit
  • pwd
  • git init

通过

  • ls -ah

查看隐藏文件,可看到    .git文件

 

把文件添加到版本库:

先写好一个readme文件放到 learnGit文件夹下

  • git add readme.txt
  • git commit -m “wrote a readme file

其中 -m 后面输入的为本次提交说明,可输入任何内容,要有意义

Git支持一次提交多个文件

扫描二维码关注公众号,回复: 7872274 查看本文章
  • git add file2.txt file3.txt
  • git commit -m “add 2 files

 

 

时光机穿梭

 

查看都有说明文件被修改了

  • git status

查看目标文件修改的具体内容,wq可直接退出,键盘上下键可翻页

  • git diff readme.txt

知道了具体的修改内容后,再将它提交到仓库中

  • git add readme.txt

不会有任何回应,再次查看状态,将看到修改后的文件,此文将将被提交

  • git status

最后使用commit提交文件

  • git commit -m “changed my readme file
  • git status

随时查看状态,告诉自己有什么被修改过

 

版本回退

head指向那个版本,当前版本就为哪个版本

Head 指向的版本就是当前版本,git log可查看想要回到的版本,git reflog重返未来可查看对版本都做过什么操作,git reset —hard +版本号 可回到未来

 

  • git log     查看历史提交信息
  • git log —pretty=oneline    历史提交信息每一条都简化为一条,前面的一连串为版本号
  • git reset —hard HEAD ^    回退到上一个版本(记住后面的那个符号),21世纪去19世纪
  • git reset —hard 5397ad2        后面的为版本号,从19世纪回到21世纪
  • git reflog       记录你对版本修改的每一次命令

 

工作区和暂存区

 

工作区:

电脑里能看到的目录,比如我们的learnGit文件夹就是一个工作区

版本库:

工作区有一个隐藏的目录.git,这个不算工作区,而是git的版本库

.git中存了很多东西,最重要的为stage的暂存区,还有git为我们自动创建的第一个分支master,以及指向master的一个指针交HEAD

 

1.git add    把文件添加到暂存区

2.git commit   把暂存区的所有内容提交到当前分支

由于git为我们创建了分支,因此,之前的git commit都是往master分支提交。

一旦git commit之后,并且没有对工作区做任何修改,那么暂存区就是“干净”的

 

 

管理修改

 

只会提交第一次的内容,因为没有git add (错误)

第一次修改——》git add ——》第二次修改——》git commit   

 

两次内容合并后提交     (正确)

第一次修改——》git add——》第二次修改——》git add——》git commit

 

撤销修改

(还未add前)将文件内容撤销到本次修改前,git status上会有提示是否可以git checkout

  • git checkout — readem.txt

(Add之后)将暂存区退回到工作区

  • git reset HEAD readem.txt

 

删除文件

如果删除了并且已经commit,则恢复到最新版本即可找到之前文件,但最近的修改将找不回,仅可恢复到最新文件

 

真的想删除

  • rm ancg.txt       工作区删除
  • git status         将告诉你发生了什么变化
  • git rm ancg.txt      在git中也删除
  • git commit -m “remove ancg.txt”      最后commit提交

如果是误删文件,想要找回

  • git checkout —ancg.txt

 

 

添加远程仓库

本地有了一个git仓库,github上也建了一个远程仓库,想要让两个仓库进行远程同步。

上面的anchaoguang为github账户名,添加后远程仓库的名字就是origin(默认,可改)

  • git push -u origin master     将当前分支master推送到远程

上面的    master是本地仓库分支,origin为远程仓库名(默认,可改)

由于origin是空的,我们第一次推送master分支时,加上-u参数,git不会把本地master分支推送到远程新的master分支,还会把本地的master分支和远程master分支关联起来,在以后的推送或者拉取时就可以简化命令。

 

工作中当然还是关联master分支最好

 

从远程库克隆

将远程仓库的文件克隆到本地库

上面anchaoguang为账户名,learnGit为项目名

 

创建和合并分支

使用checkout或者swich,除了创建并切换不同,其余可用swich替代checkout

Swich中创建并切换为

  • git swich -c dev

 

Check中创建并切换

  • git checkout -b dev       创建并切换到dev分支

上面的 -b 表示切换的意思,相当于以下两条命令

  • git banch dev
  • git checkout dev

查看当前分支

  • git branch

在分支修改工作区文件并add及commit,dev分支的工作完成,接下来合并到master

  • git add readem.txt
  • git commit -m “branch test

切回master并merge合并

  • git checkout master
  • git merge dev

合并完之后,就可以删除分支了

  • git branch -d dev

解决冲突

 

当两个分支修改了同一个内容时,将产生冲突

在最后合并的时候,会报错,产生了冲突

 

  • git status           可以看状态
  • Cat readem.txt   查看文件可看到产生冲突的位置

在改完冲突之后再    add   commit merge即可

  • git log —graph —pretty=oneline —abbrev-commit         看到分支合并情况

 

分支管理策略

通常合并分支时,git会用到fast forward模式,删除分支后,会丢掉分支的信息

 

如果要强制禁用fast forward模式,git就会在merge时生成一个新的commit,这样在分支历史上就可以看出分支信息

 

  • git merge —no-ff -m “merge with no-ff” dev

Fast forward 合并就看不出来曾今做个的合并,

禁用之后就可以看了

 

Bug分支

 

当接到一个处理bug通知,master有bug急需处理,而现在dev分支的东西写到一半怎么办。

 

  • git stash      先将当前工作现场“储存起来”(dev中)
  • git checkout master    先切到master
  • git checkout -b issue-101      创建临时分支用来修复bug
  • add   commit
  • 切回master
  • 合并分支,删除临时分支
  • 切到工作分支,dev
  • Git stash list    查看刚刚保存的工作现场到哪去了

方式1.

  • git stash apply    恢复,但恢复后还需git stash drop来删除

方式2.

  • git stash pop        恢复,并删除stash内容

早期的bug被发现之后,回直到,dev中也是有bug的,因此可使用以下命令

  • git cherry-pick 4c805e2        复制提交所做的修改

4c805e2   为修改后提交号,,,,

 

Feature分支

每添加一个新功能最好开一个新分支,开发完后切回,合并,删除

当还未合并时,接到命令需要删除featrue分支

  • git branch -D featrue-vulcan

上面-D为大写D,强制删除,,,,featrue-vulcan为分支名

 

多人协作

  • Git remote     查看远程库信息
  • git remote -v 显示更详细信息

推送分支

  • git push origin master       将本地master推送到远程origin
  • git push origin dev             将本地dev 推送到远程

push前一定要先pull,拉取最新代码,

  • git branch —set-upstream-to=origin/dev dev

origin/dev 为远程origin下的dev        后面的dev为本地dev,将两个dev绑定

  • git pull
  • git commit -m”fix
  • Git push origin dev

 

Rebase

 

  • rebase操作可以把本地未push的分叉提交历史整理成直线;
  • rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

标签

用来使用标签替代原有的那一串数字字母(commit id)

 

切换到打标签的分支上

    • Git tag v1.0     当前分支打标签
    • Git tag             查看所有标签
    • git log --pretty=oneline --abbrev-commit       查看所有提交记录
    • git tag v0.9 f52c633          将commit id为f52c633    改为v0.9标签

猜你喜欢

转载自www.cnblogs.com/acg88688/p/11870568.html