1、安装git
sudo apt-get install git
设置操作git的用户邮箱
$ git config --global user.name "Your Name" $ git config --global user.email "[email protected]"
2、初始化git仓库(repository)
$ git init Initialized empty Git repository in /Users/michael/learngit/.git/
3、添加文件(暂存区)
$ git add [filename] 例如:$git add readme.txt a.txt 多个文件 空格分开,或多次add
4、提交文件
$ git commit -m "备注信息"
5、查看仓库当前状态
$ git status
6、查看difference,对比文件
$ git diff readme.txt 命令可以查看工作区和版本库里面最新版本的区别git diff HEAD -- readme.txt
$ git diff HEAD -- readme.txt
diff --git a/readme.txt b/readme.txt
index 76d770f..a9c5755 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,4 @@
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.
+Git tracks changes of files.
7、查看历史记录
$ git log 整齐显示:$ git log --pretty=oneline
$ git log --pretty=oneline
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
e475afc93c209a690c39c13a46716e8fa000c366 add distributed
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file
8、回退到上一版本
$ git reset --hard HEAD^ 回退到具体版本$ git reset --hard 1094a,具体commitID的前几位即可
9、记录每一次命令
$ git reflog e475afc HEAD@{1}: reset: moving to HEAD^ 1094adb (HEAD -> master) HEAD@{2}: commit: append GPL e475afc HEAD@{3}: commit: add distributed eaadf4e HEAD@{4}: commit (initial): wrote a readme file
10、撤销修改
丢弃工作区修改
$ git checkout -- readme.txt
撤销暂存区修改
$ git reset HEAD readme.txt
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD
,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
11、删除文件
$ rm test.txt $ git rm test.txt
12、github远程仓库生成ssh key
$ ssh-keygen -t rsa -C "[email protected]"
13、关联本地和github仓库
$ git remote add origin [email protected]:[个人账户]/[仓库名称].git
14、把本地库的所有内容推送到远程库上
$ git push -u origin master
如果服务器上有README.md pull的时候加参数:
$git pull origin master –allow-unrelated-histories
把本地库的内容推送到远程,用git push
命令,实际上是把当前分支master
推送到远程。
由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。
以后推送用
$ git push origin master
15、克隆一个本地仓库
$ git clone [github仓库地址]
16、创建分支
$ git checkout -b dev
git checkout
命令加上-b
参数表示创建并切换,相当于以下两条命令:
$ git branch dev $ git checkout dev
16、查看所有分支
$ git branch
git branch
命令会列出所有分支,当前分支前面会标一个*
号。
17、切换分支
$ git checkout master $ git checkout dev
18、合并分支,把dev合并到master,首先切换到master
$ git merge dev
no-ff模式合并,合并dev到master,这样会写log
$ git merge --no-ff -m "merge with no-ff" dev
19、删除dev分支
$ git branch -d dev
查看分支:git branch
创建分支:git branch
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d
20、如果合并存在冲突,修改冲突文件,执行git add, git commit -m "remark"
查看合并后的log
$ git log --graph --pretty=oneline --abbrev-commit
21、封存当前的工作状态
$ git stash
查看封存的状态
$ git stash list
恢复工作状态并删除封存
$ git stash pop
或用git stash apply
恢复,但是恢复后,stash内容并不删除,你需要用git stash drop
来删除;
后恢复指定的stash
$ git stash apply stash@{0}
22、查看远程库信息
$ git remote
23、推送master分支
$ git push origin master
推送dev分支
$ git push origin dev
24、创建远程origin
的dev
分支到本地
$ git checkout -b dev origin/dev
25、多人协作
多人协作的工作模式通常是这样:
-
首先,可以试图用
git push origin
推送自己的修改; -
如果推送失败,则因为远程分支比你的本地更新,需要先用
git pull
试图合并; -
如果合并有冲突,则解决冲突,并在本地提交;
-
没有冲突或者解决掉冲突后,再用
git push origin
推送就能成功!
如果git pull
提示no tracking information
,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to
。
26、打标签tag
$ git tag v1.0
查看标签
$ git tag
为commitid打标签,先通过$git log --pretty=oneline --abbrev-commit查看commitid
$ git tag v0.9 f52c633
查看标签信息
$ git show v0.9
创建带有说明的标签
$ git tag -a v0.1 -m "version 0.1 released" 1094adb
删除标签
$ git tag -d v0.1
推送到远程
$ git push origin v1.0
一次性推送全部尚未推送到远程的本地标签
$ git push origin --tags
删除远程标签,先删本地标签,然后删远程
$ git tag -d v0.9 $ git push origin :refs/tags/v0.9