git操作
Git
Git基本操作
查看版本库状态:
git status
增加文件到暂存区:
git add test.txt
查看文件具体修改:
git diff test.txt
增加文件到暂存区:
git add test.txt
提交版本到分支:
git commit -m "change Git to git"
可以再次查看状态:
git status
- 查看历史状态
-
git is a version control system.
-
git is free software.
-
git is good.
-
增加文件到暂存区:
git add test.txt
提交版本到分支:
git commit -m "add new line git is good"
...重复以上步骤保存文件的多个版本...
查看历史版本:
git log
或
git log --pretty=oneline
回滚版本
git reset --hard HEAD^
在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD ^ ^ ,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
也可以通过版本包跳转版本,比上一种写法好的地方在于可以跳转到已经被回退的版本上:
git reset --hard 5527510751b4303390bb4f321bfa8b7f997cbfd0
或简写为
git reset --hard 55275
但是问题是如知道版本号呢?可以通过如下命令查看之前所有提交对应操作及版本号:
git reflog
撤销更改
- 尚未增加文件到暂存区:
修改test.txt
git is a version control system.
git is free software.
git is good
git is easy to use
git is really useful
boss is stupid
撤销修改 -- 将文件恢复到最近一次add 或 commit之前的状态
git checkout -- test.txt - 已经增加文件到暂存区,但尚未提交到分支:
修改test.txt
git is a version control system.
git is free software.
git is good
git is easy to use
git is really useful
boss is stupid
增加文件到暂存区:
git add
撤销修改 -- 把暂存区的修改撤销掉
git reset HEAD test.txt
撤销修改 -- 将文件恢复到最近一次add 或 commit之前的状态
git checkout -- test.txt - 但这仅限于本地版本库,如果版本已经提交到远程版本库,则即使在本地做版本库中做回退,也无法取消在远程版本库中的记录。
删除文件
-
从工作区中删除文件
rm test.txt
查看版本库状态
git status
增加删除文件操作到暂存区:
git rm test.txt
提交版本到分支
git commit -m “描述” -
细节:Git跟踪并管理的是修改,而非文件。
GitHub远程仓库连接
- 创建SSH Key
$ ssh-keygen -t rsa -C "youremail@example.com"
最终,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
登陆GitHub,打开“Account settings”,“SSH Keys”页面,然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容
关联远程仓库
-
本地关联到远程仓库:
$ git remote add origin git@github.com:piaoqian/learngit.git
推送到远程仓库
- 把本地库的内容推送到远程:
$ git push -u origin master - 第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
$ git push origin master
从远程仓库克隆
$ git clone git@github.com:piaoqian/gitskills.git
拉取版本
$ git pull <远程主机名> <远程分支名>:<本地分支名>
删除远程仓库关联
$git remote rm origin
分支
-
创建分支:
$ git branch dev -
$ git checkout dev
-
或
$ git checkout -b dev //-b参数表示创建并切换 -
用git branch命令查看当前分支:
$git branch -
创建文件:
test2.txt
creating a new branch is quick. -
提交:
$ git add test2.txt -
$ git commit -m "branch test"
-
切换回主分支
$git checkout master0 -
把dev分支的工作成果合并到master分支上。git merge命令用于合并指定分支到当前分支。此时采用的是快速合并策略。
$git merge dev0 -
合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支:
删除dev分支:
$ git branch -d dev -
查看branch:
$ git branch
分支之间合并冲突
-
当多个分支之间的进行合并时,可能会产生冲突,需要对冲突解决后才能合并分支
创建新的分支feature1
$ git checkout -b feature1 -
修改文件:
test2.txt
creating a new branch is quick and simple.
在feature1分支上提交:
$ git add test2.txt -
git commit -m "AND simple"
切换到master分支:
$ git checkout master -
修改文件:
test2.txt
Creating a new branch is quick & simple. -
在master分支上提交:
$ git add test2.txt -
$ git commit -m "& simple"
-
这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突:
$ git merge feature1 -
Git告诉我们,test2.txt文件存在冲突,必须手动解决冲突后再提交。git status也可以告诉我们冲突的文件:
$ git status
修改如下后保存:
Creating a new branch is quick and simple. -
再提交:
$ git add test2.txt -
$ git commit -m "conflict fixed"
用带参数的git log也可以看到分支的合并情况: -
$ git log --graph --abbrev-commit --pretty=oneline
-
最后,删除feature1分支:
$ git branch -d feature1
冲突解决。
stash暂存分支
-
当某一分支工作到一半,突然需要切换到其他分支时,可以通过stash机制将当前分支状态暂存起来,再在需要的时候恢复。
创建新的分支dev
$ git checkout -b dev -
修改文件:
test3.txt
today is a good day.
加入文件: -
$ git add test3.txt
临时需要切换到其他分支,暂存当前分支: -
$ git stash
查看状态: -
$ git status
切换到dev2分支 -
$ git checkout master
-
$ git checkout -b dev2
-
修改文件:
test4.txt -
happy every day
加入文件: -
$ git add test4.txt
提交文件: -
$ git commit test4.txt -m "add test4.txt"
切换到master分支 -
$ git checkout master
合并分支 -
$ git merge --no-ff -m "merged dev2" dev2
-
切换回dev分支:
$ git checkout dev -
$ git status
发现工作区是干净的,需要恢复暂存分支: -
$ git stash list
有两个办法: -
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删
$ git stash pop
多人协作
- 在多人使用远程仓库进行工作时,往往在同一个分支上的操作会存在冲突,此时需要远程冲突合并。
多人协作的工作模式通常是这样:
首先,可以试图用git push origin推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-toorigin/
标签
-
git中的版本都有版本编号,对代码的提交和回滚都是基于版本编号进行的,但是git中的版本编号是一串随机串,不好记忆,此时可以使用标签机制为某个提交增加标签,方便以后查找
在当前分支当前提交上打标签:
$git tag v1.0
查看所有标签,默认标签是打在最新提交的commit上的: -
$git tag
如果想要打标签在某个指定历史commit上: -
$ git tag v0.9 f52c633
还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字: -
$ git tag -a v0.1 -m "version 0.1 released" 1094adb
可以通过如下命令查看一个tag信息: -
$ git show v0.1
-
如果标签打错了,也可以删除:
$ git tag -d v0.1 -
如果要推送某个标签到远程,使用命令git push origin
:
$ git push origin v1.0 -
或者,一次性推送全部尚未推送到远程的本地标签:
$ git push origin --tags -
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
$ git tag -d v0.9 -
然后,从远程删除。删除命令也是push,但是格式如下:
$ git push origin :refs/tags/v0.9
别名
-
配置别名:
$ git config --global alias.st status -
$ git config --global alias.co checkout
-
$ git config --global alias.ci commit
-
$ git config --global alias.br branch
-
删除别名:
找到[user_dir]/.gitconfig 文件
找到[alias]标签,删除其中别名

浙公网安备 33010602011771号