..." to">
当前位置:   article > 正文

[Git]入门及常用操作_on branch master changes not staged for commit: (u

on branch master changes not staged for commit: (use "git add ..." to

1、安装Git

根据自己系统,自行安装,可百度教程。

找一个合适的文件夹,右击打开Git Bash,即可输入以下命令。

2、创建版本库

(1)创建版本库,pwd显示当前文件夹路径。

$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
  • 1
  • 2
  • 3
  • 4

(2)初始化版本库

$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
  • 1
  • 2

(3)添加文件并提交
在版本库中创建一个readme.txt文件,随便写入内容,后文将以readme.txt为例。

添加:git add <file>

$ git add readme.txt
  • 1

提交:git commit -m "xxx"-m是必须要带上,否则报错。"xxx"里面写上这次提交的一个简要说明,后期可以查看。

$ git commit -m "wrote a readme file"
[master (root-commit) eaadf4e] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt
  • 1
  • 2
  • 3
  • 4

添加多个文件,后面一起提交:

$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
  • 1
  • 2
  • 3

当某次修改添加后,又进行了修改,但是没有添加,此时若提交,则只提交了第一次添加的修改。要想提交第二次的修改,则还需要进行一次添加,再提交。
git diff HEAD -- <file>命令可以查看工作区和版本库里面最新版本的区别。

(4)删除文件$git rm <file>
先从版本库中删除该文件:

$ git rm test.txt
rm 'test.txt'
  • 1
  • 2

再提交:

$ git commit -m "remove test.txt"
[master d46f35e] remove test.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt
  • 1
  • 2
  • 3
  • 4

(5)查看仓库当前的状态git status

$ git status
On branch master
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:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

(6)查看历史记录git log,显示从最近到最远的提交日志,commit后面的字符串是版本号。

$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:06:15 2018 +0800

    append GPL

commit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:03:36 2018 +0800

    add distributed

commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 20:59:18 2018 +0800

    wrote a readme file
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

(7)查看某个文件cat <file>

cat readme.txt
  • 1

3、版本控制

工作区(Working Directory):在电脑里看到的目录,例如learngit
版本库(Repository):工作区内的隐藏目录.git,包含第一个分支master,以及指向master的一个指针HEAD
暂存区:git add将文件添加到暂存区,git commit将暂存区文件添加到当前分支。

(1)版本回退git reset
HEAD表示当前版本,上一个版本HEAD^,上上个版本HEAD^^…,上100个版本HEAD~100
因此,在不使用版本号的时候可以:

$ git reset --hard HEAD^
HEAD is now at e475afc add distributed
  • 1
  • 2

在使用版本号时,版本号不用写全,写前面几位就可以:

$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL
  • 1
  • 2

(2)撤销修改
例如,你刚在文件中更改了一些代码,回想起来不妥,你想把它撤销。在清楚地记得改动时,可以打开文件直接改回去。若不记得自己做了哪些修改,可使用指令。

情况1:包含2种子情况。

  • 文件自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  • 文件已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
    git checkout -- <file>丢弃工作区的修改,--很重要,没有的话就是切换节点的意思。
$ git checkout -- readme.txt
  • 1

直接可以看到文件恢复到了上一次提交的状态。

情况2:修改文件,还将它添加到了暂存区,但是还未commit
git reset HEAD <file>可以把暂存区的添加撤销掉(unstage)。git reset命令既可以回退版本,也可以把暂存区的文件回退到工作区。当我们用HEAD时,表示最新的版本。

$ git reset HEAD readme.txt
Unstaged changes after reset:
M	readme.txt
  • 1
  • 2
  • 3

再用git status查看一下,现在暂存区是干净的,工作区有修改:

$ git status
On branch master
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:   readme.txt
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

此时,回到第1种情况,使用git checkout -- <file>指令即可。

4、远程仓库

(1)创建Git远程仓库。
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

$ ssh-keygen -t rsa -C "youremail@example.com"
  • 1

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

第2步:登陆GitHub -> 点击右上角头像 -> “Settings” -> 点击左侧选项:“SSH and GPG Keys” -> 点击"New SSH key" ->填写Title -> 在key中填写id_rsa.pub文件的内容 -> 点击"Add SSH key"。
在这里插入图片描述
为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

(2)上传文件至远程库
现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举多得。

第1步: 在GitHub,创建一个新的仓库。
在Repository name填入learngit,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库:

在这里插入图片描述
第2步: 在本地的learngit仓库下运行命令,将xxxxx换成你的GitHub账户名。

$ git remote add origin git@github.com:xxxxx/learngit.git
  • 1

添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

第3步: 把本地库的所有内容推送到远程库上。

$ git push -u origin master
Counting objects: 20, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done.
Total 20 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), done.
To github.com:michaelliao/learngit.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

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

推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样。

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

$ git push origin master
  • 1

把本地master分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库!

删除远程库
如果添加的时候地址写错了,或者就是想删除远程库,可以用git remote rm <name>命令。使用前,建议先用git remote -v查看远程库信息:

$ git remote -v
origin  git@github.com:michaelliao/learn-git.git (fetch)
origin  git@github.com:michaelliao/learn-git.git (push)
  • 1
  • 2
  • 3

然后,根据名字删除,比如删除origin:

$ git remote rm origin
  • 1

此处的“删除”其实是解除了本地和远程的绑定关系,并不是物理上删除了远程库。远程库本身并没有任何改动。要真正删除远程库,需要登录到GitHub,在后台页面找到删除按钮再删除。

(3)从远程库克隆

用命令git clone克隆一个本地库,将xxxxx换成你的GitHub账户名。

$ git clone git@github.com:xxxxx/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3
Receiving objects: 100% (3/3), done.
  • 1
  • 2
  • 3
  • 4
  • 5

然后进入gitskills目录看看,已经克隆了所有文件了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/264786
推荐阅读
相关标签
  

闽ICP备14008679号