美文网首页
Git学习笔记 - 钢钢更新

Git学习笔记 - 钢钢更新

作者: 钢钢更新 | 来源:发表于2018-04-28 10:45 被阅读0次

参考资料

本文内容参考了廖雪峰老师的博文,并做了适当整理,方便大家查阅。


常用命令

仓库初始化 - git init

git init
image

我们新建一个文本文件readme.txt

Git is a distributed version control system.
Git is free software.

将文件添加到仓库中 - git add

git add .

将文件提交到仓库 - git commit

git commit -m "wrote a readme file"
image

查看仓库状态 - git status

git status
image

对比文件区别 - git diff

对文件内容进行简单修改并保存,这时还未提交(commit)到仓库,如果这时我们希望对比一下自从上次提交后,该文件发生了哪些变化,可以用git diff命令实现。

git diff readme.txt
image

注:diff比较的是当前未提交(commit)的版本跟上一个版本之间的差别。一旦commit到仓库,就无法比较了。

查看日志 - git log

git log

我们通过git log命令可以清楚地看到之前提交的版本。这里的一大串数字叫commit id。我们可以清楚地看到当前HEAD即是当前位置(append GPL

image

回退版本 - git reset

当前所处的位置为HEAD,如果我们希望回退到上一步(即add distribute),可以用HEAD^来表示。上两步是HEAD^^,以此类推。

git reset --hard HEAD^
image

查看文件,内容已经更改回版本2了。

image

此时我们再用git log查看历史记录:

image

发现版本3已经不见了,这时如果想再回复回去还有办法么?答案当然是肯定的,只要你记得commit id,随时可以用以下命令穿梭回去。

git reset --hard acc1d

注:这里的acc1dcommit id的前几位,不需要写全,git会自动匹配。

image

再次git log查看一下:

image

查看所有历史记录 - git reflog

如果你忘记了之前的commit id也不要紧,可以用过git reflog来查找。

git reflog
image

撤销工作区修改 - git checkout -- filename

假设现在我们又修改了文件内容。
readme.txt

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
My stupid boss still prefers SVN.

这时我们保存了,但还没有提交到缓冲区。用git status查看,git提示文件已修改。

image

这时,我们可以用git checkout -- filename撤销修改就回到和版本库一模一样的状态。

image

结论:

  • 如果文件还没被提交到缓冲区,git checkout -- filename撤销修改就回到和版本库一模一样的状态;
  • 如果文件已经被提交到缓冲区,git checkout -- filename撤销修改就回到添加到暂存区后的状态;

注:git checkout -- filename命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令。

撤销缓冲区修改 - git reset

git reset HEAD filename命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

image

这时如果还想撤销缓存区的修改,同样运行git checkout -- filename即可。

删除文件 - git rm filename

当你删除了本地文件后,可能有两种情况:

  • 你确认要删除该文件,无论本地还是代码库;
  • 本地误操作,想要从代码库回复;

如果是第一种情况,可以用如下命令:

git rm test.txt

再用git commit把正式提交删除即可。

git commit -m "delete test.txt"

如果是第二种情况,可以简单地用git checkout命令回退。

git checkout -- test.txt

远端仓库

将本地仓库关联到远程仓库 - git remote add origin [your repo url]

在Github上新建一个仓库,例如:learngit

image

Github会提示你可以将本地的仓库(目录)跟新建的仓库关联起来。
这里的https://github.com/wfg2513148/learngit.git是刚刚创建的仓库,origin是远程仓库默认的名字,一般看到origin字样就知道是远程库。

git remote add origin https://github.com/wfg2513148/learngit.git
git push -u origin master
~/Desktop/learngit(master) » git push -u origin master
Counting objects: 9, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (9/9), 820 bytes | 820.00 KiB/s, done.
Total 9 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), done.
To github.com:wfg2513148/learngit.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

注:当时在推送到远端仓库时遇到了以下异常:

~/Desktop/learngit(master) » git push -u origin master
ERROR: Repository not found.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

可以尝试以下方法解决:

重新生成ssh-key并绑定到Github上

运行ssh-keygen -t rsa -C "wfgdlut@gmail.com" 需要替换成你自己的Github账号邮箱。

~/Desktop/learngit(master) » ssh-keygen -t rsa -C "wfgdlut@gmail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/kwang/.ssh/id_rsa):
/Users/kwang/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/kwang/.ssh/id_rsa.
Your public key has been saved in /Users/kwang/.ssh/id_rsa.pub.

查看生成好的公钥文件内容,本例中的为/Users/kwang/.ssh/id_rsa.pub

将公钥内容原封不动的添加到Github上(Settings -> SSH and GPG keys -> New SSH key

image

如果还是报错,继续以下步骤。

显式指定远端仓库路径 - git remote set-url origin [your repo url]

git remote set-url origin [YOUR REPO] 明确指定远端仓库,再次推送,应该就可以了。

git remote set-url origin git@github.com:wfg2513148/learngit.git

克隆远端仓库 - git clone [your repo url]

git clone git@github.com:wfg2513148/gitskills.git

分支

创建新分支 - git checkout -b [new branch name]

git checkout -b dev
image

-b参数表示创建完立刻切换,相当于执行了以下两条命令:

git branch dev
git checkout dev

查看分支 - git branch

image

切换分支 - git branch [branch name]

git branch master

合并分支

Fast-forward模式 - git merge [branch name merged]

当前我们处在master分支,现在想把dev分支合并到master分支上

git merge dev

可以看到,当前合并模式是Fast-forward,即快进模式,合并速度非常快。Git分支合并还有其他的模式。

image

留痕模式 - git merge --no-ff -m "no-ff merge" [branch name merged]

我们可以使用--no-ff参数来合并,这样会保留合并历史分支的痕迹。

image

可以看到,dev分支的信息被保留下来了。

image

删除分支

正常删除分支 - git branch -d [branch name]

git branch -d feture1

强行删除分支 - ```git branch -D [branch name]`

git branch -D feture1

结语

本文作为个人学习Git的参考资料,会不断丰富内容,也希望能够对大家有帮助。

相关文章

网友评论

      本文标题:Git学习笔记 - 钢钢更新

      本文链接:https://www.haomeiwen.com/subject/ehzwlftx.html