Git知识整理

来源:互联网 发布:dos复制文件到linux 编辑:程序博客网 时间:2024/06/06 05:39

一、 建库


设置自己的名字及email

<span style="font-size:14px;color:#666666;">$ git config --global user.name "Your Name"$ git config --global user.email "email@example.com"</span>

创建一个版本库

<span style="font-size:14px;color:#666666;">$ mkdir learngit$ cd learngit$ pwd/Users/michael/learngit</span>

二、初始化

初始化一个Git仓库,使用git init命令。

添加文件到Git仓库,分两步:

第一步,使用命令git add <file>,注意,可反复多次使用,添加多个文件;如:git add readme.txt

第二步,使用命令git commit,完成。如:git commit -m "wrote a readme file"


三、Git操作

1.修改文件,然后把修改提交到Git版本库。如对readme.txt进行修改后:

git status 查看仓库当前的状态。

git diff 查看修改的内容 。如:git diff readme.txt

git add添加文件。如:git add readme.txt

git commit提交修改。如:git commit -m "add another sentence"


2.版本回退

git log查看历史记录,若要使每次修改在一行显示:git log --pretty=oneline

若需是readme.txt回退到上一个版本:

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

回退:git reset --hardHEAD^

查看:cat readme.txt

若要返回到新版本:

  窗口未关闭:git reset --hard 6a85173(这是提交的id)

窗口已关闭:通过git reflog 查看提交id


3.工作区和暂存区

learngit就是一个工作区,有一个隐藏的.git目录,即版本库,Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

把文件往Git版本库里添加的时候,是分两步执行的:

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

3.管理修改

4.撤销修改

情况分为三种

1.修改之后未add直接使用git checkout -- readme.txt(撤销工作区的修改)

2.修改之后add了先git reset -- HEAD .txt(撤销暂存区的修改)后git checkout -- readme.txt(撤销工作区的修改)

3.commit之后git reset -- hard HEAD^版本回退

4.删除文件

git rm test.txt

git commit -m "remove test.txt"


四、远程仓库


Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。

由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置。


1.添加远程库:

1.首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库。

2.添加远程库,库名默认origin

$ git remote add origin git@github.com:yanlingwang/learning.git
3.把本地库的所有内容推送到远程库上:
$ git push -u origin master
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

从现在起,只要本地作了提交,就可以通过命令:

$ git push origin master

把本地master分支的最新修改推送至GitHub。

在本操作中,我遇到了一个问题,如下:


尝试重新输入后遇到另一个问题:


解决办法:



成功!GitHub页面中看到远程库的内容已经和本地一模一样。


若遇到另一个错误fail to push some rifs to git,解决方案:

       出现错误的主要原因是github中的README.md文件不在本地代码目录中,可以通过如下命令进行代码合并【注:pull=fetch+merge]  git pull --rebase origin master  执行上面代码后可以看到本地代码库中多了README.md文件

2.从远程库克隆:

git clone https://github.com/yanlingwang/pagetest

五、分支管理

1.创建和合并分支

首先,创建dev分支,然后切换到dev分支:


<span style="color:#666666;">$ git checkout -b devSwitched to a new branch 'dev'</span>


git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

$ git branch dev$ git checkout devSwitched to branch 'dev'
<span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);">然后,用</span><code style="font-size: 12px; font-family: Consolas, monospace, serif; white-space: nowrap; padding: 0px 4px; border: 1px solid rgb(221, 221, 221); border-radius: 3px; background: rgb(250, 250, 250);">git branch</code><span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);">命令查看当前分支:</span>
<span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);"></span><pre name="code" class="plain">$ git branch* dev  master

git branch命令会列出所有分支,当前分支前面会标一个*号。

然后,就可以在dev分支上正常提交,比如对readme.txt做个修改,加上一行,然后提交。

现在,dev分支的工作完成,就可以切换回master分支:

$ git checkout master
切换回master分支后,再查看一个readme.txt文件,刚才添加的内容不见了!因为那个提交是在dev分支上,而master分支此刻的提交点并没有变。应当把dev分支的工作成果合并到master分支上,

$ git merge dev
git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。

合并完成后,就可以删除dev分支了:

$ git branch -d devDeleted branch dev (was fec145a).
<span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);">删除后,查看</span><code style="font-size: 12px; font-family: Consolas, monospace, serif; color: rgb(221, 0, 85); white-space: nowrap; padding: 0px 4px; border: 1px solid rgb(221, 221, 221); border-radius: 3px; background: rgb(250, 250, 250);">branch</code><span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);">,就只剩下</span><code style="font-size: 12px; font-family: Consolas, monospace, serif; color: rgb(221, 0, 85); white-space: nowrap; padding: 0px 4px; border: 1px solid rgb(221, 221, 221); border-radius: 3px; background: rgb(250, 250, 250);">master</code><span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);">分支了:</span>
<span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; white-space: pre-wrap; background-color: rgb(255, 255, 255);"></span><pre name="code" class="plain">$ git branch* master

因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。

$ git push origin test:master         // 提交本地test分支作为远程的master分支
$ git push origin test:test              // 提交本地test分支作为远程的test分支

删除一个远程分支:git push origin --delete 分支名

提交本地分支到另一个远程库分支:git remote add <另一个远程仓库名> <另一个远程仓库url>
                                                      git push <另一个远程仓库名> <本地分支名>:<另一个远程仓库分支名>

合并分支:git checkout <本地分支>
                 git rebase master
                 手动修改冲突后,git add
                 继续下一步冲突显示,git rebase --continue,直到没有冲突
                 git commit -m "xxx"

六、其它

git branch 查看本地分支

git branch -r 查看远程分支

git branch -a 查看所有分支

git log 查看所有的commit

git stash 查看临时文件的变动

git pull 取回远程库某个分支的更新,再与本地的指定分支合并。完整命令如下:
git pull <远程主机> <远程分支>:<本地分支> 如:git pull origin yanling:master 将远程库的yanling分支与本地master分支合并。
若合并的本地的当前分支,则可省略为 git pull <远程主机> <远程分支>, 如git pull origin yanlilng

git push 将本地分支的更新推送到远程库。完整命令如下:
git push <远程主机> <本地分支>:<远程分支>
git push origin master 将本地master分支推送到远程库的master分支,如果后者不存在,将被新建。
git push -u origin master 若当前分支和多个主机存在追踪关系,则使用-u指定一个默认主机,这里指定origin为默认主机。

git remote -v  查看远程库的url

git remote show <remote> 查看远程库的信息,如git remote show origin

git remote add <remote> <url> 添加新的远程库 ,如 git remote add origin xxxx

git remote set-url <remote> <url>这种情况是远程代码仓库更改域名,路径等.导致远程地址变化,我们需要更新git远程仓库地址,如git remote set-url origin xxxx

git push --set-upstream origin master
git中存在upstream和downstream,简言之,当我们把仓库A中某分支x的代码push到仓库B分支y,此时仓库B的这个分支y就叫做A中x

分支的upstream,而x则被称作y的dowgit中存在upstream和downstream,简言之,当我们把仓库A中某分支x的代码push到仓库B分支

y,此时仓库B的这个分支y就叫做A中x分支的upstream,而x则被称作y的downstream,这是一个相对关系,每一个本地分支都相对地

可以有一个远程的upstream分支(注意这个upstream分支可以不同名,但通常我们都会使用同名分支作为upstream)。nstream,这

是一个相对关系,每一个本地分支都相对地可以有一个远程的upstream分支(注意这个upstream分支可以不同名,但通常我们都会

使用同名分支作为upstream)。

初次提交本地分支,例如git push origin develop操作,并不会定义当前本地分支的upstream分支,我们可以通过git push --set-upstream origin develop,关联本地develop分支的upstream分支,另一个更为简洁的方式是初次push时,加入-u参数,例如git push -u origin develop,这个操作在push的同时会指定当前分支的upstream。
(git branch --set-upstream origin master?)


0 0
原创粉丝点击