$ sudo apt-get install git
$ git config --global user.name "Your name"
$ git config --global user.email "Your email address"
在桌面创建一个文件夹:
$ mkdir git_learning # 在桌面创建一个文件夹,名字为git_learning
$ cd git_learning
$ pwd
/home/damon/Desktop/git_learning
初始化一个git仓库(repository):
$ git init # 初始化一个git仓库(repository)
Initialized empty Git repository in /home/damon/Desktop/git_learning/.git/
$ ls -a # ok,创建成功,在这个文件夹下多了一个.git子文件夹
. .. .git
创建一个测试文件readme.txt
$ touch readme.txt # 创建一个测试文件readme.txt
$ vi readme.txt # 在readme.txt中写一些东西
$ cat readme.txt
I am learning git!
This is a test file,just skip it.
将readme.txt添加到仓库(repository),并提交:
$ git add readme.txt # 添加文文件到仓库
$ git commit -m "添加了一个测试文本readme.txt"
[master (root-commit) 6f50b23] 添加了一个测试文本readme.txt
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
初始化一个仓库(repository):git init
添加文件到仓库:git add <filename>
提交: git commit -m "本次提交的一些说明"
先修改一下readme.txt
$ vi readme.txt # 修改一下readme.txt
$ cat readme.txt # 看看里面的内容
I am learning git!
This is a test file,just skip it.
----This is version 0.2
使用git status
看看repository当前的状态:
$ 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 # ## 这里告诉我们readme.txt修改了
no changes added to commit (use "git add" and/or "git commit -a")
使用git diff <filename>
看看文件哪里改变了:
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 4fab316..6eb874a 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,3 @@
I am learning git!
This is a test file,just skip it.
+ ----This is version 0.2 # ## ok 就是这里了
这次测试先这样,提交吧:
$ git add readme.txt
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: readme.txt
$ git commit -m "修改了readme.txt"
[master f164db8] 修改了readme.txt
1 file changed, 1 insertion(+)
$ git status
On branch master
nothing to commit, working directory clean
查看repository的状态:git status
查看某个文件更改的地方在哪里:git diff <filename>
先第二次修改readme.txt:
$ vi readme.txt
$ cat readme.txt
I am learning git!
This is a test file,just skip it.
----This is version 0.3
$ git add readme.txt
$ git commit -m"第二次修改readme.txt."
[master 0782fe9] 第二次修改readme.txt.
1 file changed, 1 insertion(+), 1 deletion(-)
OK,现在repository中一共有3个readme.txt版本了,用git log
看看:
$ git log
commit 0782fe92ce0a62966d527f3366118afaf3f6dc05
Author: Yangbo Ye <1406043623@qq.com>
Date: Sun Apr 29 18:55:00 2018 +0800
第二次修改readme.txt.
commit f164db86be0f6b9809d9a1db1986aa7b3da29c92
Author: Yangbo Ye <1406043623@qq.com>
Date: Sun Apr 29 18:13:22 2018 +0800
修改了readme.txt
commit 6f50b23faa4e6ca33f44c137d6c1516b238ca3df
Author: Yangbo Ye <1406043623@qq.com>
Date: Sun Apr 29 17:47:05 2018 +0800
添加了一个测试文本readme.txt
emmm...太多了,看个简要信息吧git log --pretty=oneline
:
$ git log --pretty=oneline
0782fe92ce0a62966d527f3366118afaf3f6dc05 第二次修改readme.txt.
f164db86be0f6b9809d9a1db1986aa7b3da29c92 修改了readme.txt
6f50b23faa4e6ca33f44c137d6c1516b238ca3df 添加了一个测试文本readme.txt
回退到上一个版本git reset --hard HEAD^
:
$ git reset --hard HEAD^
HEAD is now at f164db8 修改了readme.txt
$ cat readme.txt
I am learning git!
This is a test file,just skip it.
----This is version 0.2 # OK,这确实是上一个版本
再查查都有哪些版本:
$ git log --pretty=oneline
f164db86be0f6b9809d9a1db1986aa7b3da29c92 修改了readme.txt
6f50b23faa4e6ca33f44c137d6c1516b238ca3df 添加了一个测试文本readme.txt
好吧,version 0.3没有了。那么怎么回到第三版呢?用第三版的key(一般7位就够了)...
$ git reset --hard 0782fe9
HEAD is now at 0782fe9 第二次修改readme.txt.
$ cat readme.txt
I am learning git!
This is a test file,just skip it.
----This is version 0.3
查看命令历史git reflog
:
$ git reflog
0782fe9 HEAD@{0}: reset: moving to 0782fe9
f164db8 HEAD@{1}: reset: moving to HEAD^
0782fe9 HEAD@{2}: reset: moving to 0782fe9
f164db8 HEAD@{3}: reset: moving to HEAD^
0782fe9 HEAD@{4}: commit: 第二次修改readme.txt.
f164db8 HEAD@{5}: commit: 修改了readme.txt
6f50b23 HEAD@{6}: commit (initial): 添加了一个测试文本readme.txt
查看提交历史:git log
更换版本:git reset --hard commit_id
查看命令历史:git reflog
git checkout -- <filename>
git add命令
),但是想丢弃修改:首先,git reset HEAD <filename>
,将文件次撤回到工作区(也就是上面的情况);然后,git checkout -- <filename>
git rm
创建SSH KEY:ssh -keygen -t rsa -C "email@example.com"
。一路回车默认,然后就会在用户目录里看到.ssh
文件夹,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人。
登录GitHub,然后在settings
中的SSH and GPG keys
中添加一个SSH key,把刚才生成的id_rsa.pub
中的内容复制上去。
在GitHub中new repository,名字跟本地仓库一样。然后在本地git_learning
(也就是创建的仓库文件夹下),运行:
$ git remote add origin https://github.com/yangboye/git_learning.git
将上面的地址改成自己GitHub中的地址。当然也可用git://
这样的地址,比如:git@github.com:yangboye/git_learning.git
,这种比https协议快。
在本地将仓库所有内容推送到GitHub:
git push -u origin master
**Attention:**第一次推送要用参数-u
;而后面的推送用git push origin master
就可以了。
假设现在现有了远程库gitskills
,要从远程库克隆到本地:(注意这条命令的执行位置!!!)
$ git clone git@github.com:yangboye/gitskills.git
分支的概念非常重要。Git是一个版本管理的系统,我们可以把一个respository看成是一个链表,而每一个项目版本就是一个节点,通过一个HEAD
指针所指的一个branch name
来进行版本之间的切换。新建一个respository之后,默认有一个master
分支(也就是主分支)。
##### NOTE 4:
git branch
git branch <branch name>
git checkout <branch name>
git checkout -b <branch name>
git merge <branch name>
git branch -d <branch name>
git branch -D <branch name>
如果有一个分支branch1
,在该分支下,对readme.txt添加了一行"I am branch1";然后切换到master
分支,同时在readme.txt添加一行“I am master”,当用git merge branch1
时,两个分支都对应自己的一个版本,合并产生冲突,就需要手动修改避免冲突了。
使用git merge <branch name>
默认是fast forward,也就是说删除分支后会丢失分支信息。如果要强制禁用Fast forward
模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。命令为:git merge --no-ff -m "writing commit information here" <branch name>
。
场景:现在我们在dev
分支上工作,但是boss让我们修复一个BUG,而当前的工作又没做完。
git stash
git checkout <branch name>
dev
分支:git check out branch "dev"
git stash list
,并找到工作的现场。git stash apply stash@P{0}
,其中序号换成自己要恢复的。 多人协作的工作模式通常是这样:
首先,可以试图用git push origin branch-name
推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull
试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin branch-name
推送就能成功!
如果git pull
提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name
。
git tag <tag-name>
git tag -a <tag-name> -m "description of tag"
git tag -s <tag0name> -m "description of tag"
git tag
git push origin <tagname>
可以推送一个本地标签;git push origin --tags
可以推送全部未推送过的本地标签;git tag -d <tagname>
可以删除一个本地标签;git push origin :refs/tags/<tagname>
可以删除一个远程标签。此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。