Windows下 Git 常用操作记录
2017-11-05 20:17
218 查看
1、windows客户端安装
下载地址:http://msysgit.github.io/。全部默认安装即可。
安装完成后,会在系统右键菜单中集成
Git Bash Here等菜单选项,说明安装成功。
2、配置git用户名及邮箱地址
这个就相当于一个用户的标识信息,表示创建仓库的所有者信息。git config --global user.name "Your Name" git config --global user.email "email@example.com"
3、创建版本库
新建一个空目录作为你的仓库。比如:gitwork。
在目录中右键选择
Git Bash Here,输入
git init,初始化当前目录作为你的仓库。
$ git init Initialized empty Git repository in F:/gitwork/.git/
操作完成后,会在当前目录下创建一个
.git的文件夹,默认是隐藏的,不要手动操作这个目录下的任何文件,它是git用来跟踪版本库的。
3.1、 添加文件到版本库
使用git add readme.txt将工作区的文件readme.txt(文件必须存在)添加到暂存区(staged状态,commit前必须的操作,否则无法commit。git提交(commit)的时候是将暂存区的文件全部一次性提交到仓库永久保存的,即一个新的主分支产生了)
$ git add readme.txt
commit 之前可以使用
git diff readme.txt查看当前工作区副本与暂存区之间的差别
$ git diff readme.txt diff --git a/readme.txt b/readme.txt index e69de29..3641e2c 100644 --- a/readme.txt +++ b/readme.txt @@ -0,0 +1,3 @@ +test +hello world
确定后,使用
git commit -m "注释"提交到版本库
$ git commit -m "create new file readme.txt" [master c773499] none 1 file changed, 3 insertions(+)
使用
git status查看当前版本库工作目录中文件的状态。
文件状态有已提交(committed),已修改(modified),已暂存(staged),还有没有版本控制的(untracked)。
$ git status On branch master nothing to commit, working tree clean
平时开发的时候,肯定有很多临时文件(文件夹)是不需要提交到版本库的。但每次
git status时会显示很多Untracked files,git提供一种方案来忽略显示这些文件,就是在目录中创建一个
.gitignore文件,将你不想显示的文件类型都罗列出来。git已经提供了常用类型的配置文件,你不用自己创建,只需下载后手动增加修改即可,具体参考https://github.com/github/gitignore。
Remarks:commit 前必须先 add ,这样 git 才知道要 commit 什么。
4、查看提交日志
使用git log可以查看提交的详细日志,如果嫌太繁杂,可以使用
git log --pretty=oneline显示精简的日志。
$ git log --pretty=oneline c77349985415c4eaba4ed4a5828246d2b228e471 (HEAD -> master) none a7746fds312ef6f6jfdsopl7ss83ja7aa4ae9ijn modify readme.txt ddf00b5312ef6f60648a941a5a223a7aa4aecc8e create new file readme.txt
前面的一大串数字字母表示提交的各个版本标识,是通过SHA1计算出来的。
括号里的HEAD表示这是最新的提交版本。
5、版本回退
现在最新提交的版本是c77349(上面日志中显示的版本标识的前6位),如果想回退到注释为modify readme.txt的版本。使用
git reset --hard 需要回退的版本标识
$ git reset --hard a7746f HEAD is now at a7746f modify readme.txt
这样就回退到指定的版本了。
命令中的版本标识可以任意取前几位,但一定要唯一确定。
再使用
git log --pretty=oneline查看一下提交日志。
$ git log --pretty=oneline a7746fds312ef6f6jfdsopl7ss83ja7aa4ae9ijn (HEAD -> master) modify readme.txt ddf00b5312ef6f60648a941a5a223a7aa4aecc8e create new file readme.txt
发现没,已经看不到注释为
none这条记录了,最新的版本也跟着变成了
modify readme.txt这个版本了。(与人类的观念一致)
如此,又有一个问题,你可能又后悔了,想重新恢复到注释为
none的版本,当然你可以在
Git Bash窗口记录中找到对应的版本id来恢复。
$ git reset --hard c773499
但是,可能你想这么做的时候已经是第二天了,电脑都关机了,哪里还知道这个id。没关系,
git也提供了相应的功能。输入
git reflog即可。
$ git reflog c773499 (HEAD -> master) HEAD@{0}: reset: moving to a7746fd c773499 (HEAD -> master) HEAD@{7}: commit: none a7746fd (HEAD -> master) HEAD@{6}: commit: modify readme.txt ddf00b5 HEAD@{7}: commit (initial): create new file readme.txt
它记录了所有的commit操作信息,当然包括对应的版本的id了,这下终于没有后顾之忧了。
6、撤销工作区的修改
假如你又对 readme.txt 文件做了些修改,突然发现这些修改没什么意义,想撤销你的修改,回到没有修改以前的状态。可以使用git checkout -- 文件名
$ git checkout -- readme.txt
如果之前没有将此文件添加到暂存区(add)的话,此文件就会恢复到 HEAD 版本库(最新的版本库)的状态。
如果之前已经添加到暂存区还没有提交的话,此文件就会恢复到添加到暂存区时的状态。
如果已经添加到暂存区,可是还是想恢复到提交 HEAD 版本时的状态的话,可以使用命令
git reset HEAD 文件名,将某个文件单独回退到最新提交的状态(HEAD 表示最新提交的那个版本)。同时,这个命令会恢复暂存区中此文件的状态。
$ git reset HEAD readme.txt
7、删除文件并提交及误删处理
如果想从版本库中删除 readme.txt 文件,现在工作目录中删除此文件,这样 git 就会检测到,然后输入命令git rm 文件名,git 会从暂存区中删除此文件,然后正常
commit提交即可。
$ git rm readme.txt git commit -m "delete readme.txt" [master c773499] remove readme.txt 1 file changed, 1 deletion(-) delete mode 100644 readme.txt
这样文件就从版本库中真正的删除了。
如果是本地文件被误删了,可以使用命令
git checkout -- 文件名恢复到最近一次
add或
commit操作的状态。
8、远程仓库操作
以上介绍的所有操作都是针对本地仓库。git 还可以对远程仓库进行克隆(将远程仓库的下载一份到本地,作为一个独立的分支),推送(将自己的修改提交到远程仓库)以及拉取(检出别人对仓库做的提交)。下面分步介绍:
8.1、设置SSH Key(以 github 为例)
为了使与远程仓库通信更加安全,git 使用了 SSH 对通信加密。所以需要生成 SSH 通信密钥。
在
Git Bash中输入命令
ssh-keygen -t rsa -C "您的邮箱地址",一路回车,忽略存储路径和密码的设置。你就会在用户目录
C:\Users\用户名\.ssh中发现两个文件,id_rsa(私钥)和 id_rsa.pub(公钥)。
私钥文件不要动。在 github.com 中依次打开 Settings-SSH and GPG keys-SSH keys,单机
New SSH Key,在Title中输入提示信息,将id_rsa.pub的内容复制到Key中,保存。
8.2、克隆远程仓库
git是分布式版本控制系统,我们可以建立一个公开的仓库,可以让所有人都能从这个仓库克隆作为他们自己的分支,来帮助开源项目维护。还是以github为例,首先在github上创建一个项目,叫
gittest。
我们打开
Git Bash,将目录切换到
gitwork,输入命令
git clone 远程仓库地址。
$ git clone git@github.com:***/gittest.git Cloning into 'gittest'... remote: Counting objects: 4, done. remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 4 Receiving objects: 100% (4/4), done. Checking connectivity... done.
远程仓库地址可以从github上的gittest仓库信息中看到。这样在github上创建的远程仓库就被克隆到本地了,在当前目录中可以看到多了一个
gittest目录,仓库中的所有文件也同步到本地了。
查看远程仓库信息
git remote -v
推送分支
git push origin master
origin 为远程仓库在本地默认的名字(就是对应远程仓库的地址),master 为本地分支名,此处为主分支(也是推送到远程仓库的主分支上)。一般情况需保持主分支与远程仓库同步就行。
如果多人都在同一个分支下工作的话,当一个人push后,另外一个人再push的话就会失败,必须先将分支上最新的代码pull下来,解决冲突后,再push。
抓取分支
git pull
pull之前必须设置本地分支与远程分支的对应关系,可以使用
git branch --set-upstream dev origin/dev来将本地分支dev与远程仓库
分支dev的关系关联起来。
8.3、将本地仓库关联到远程仓库
我们还是先要在github上创建一个新的仓库,使用命令git remote add origin 新仓库地址,就将本地仓库与远程仓库之间建立了关联。
git remote add origin git@github.com:***/gittest.git
origin 为远程仓库在本地默认的名字。
使用
git branch --set-upstream master origin/master,将本地主分支与远程仓库主分支建立远程关联。
使用
git pull拉取远程仓库代码。
使用
git push来推送本地代码到远程仓库。
git push origin master
最后的master表示要推送的本地分支名。
8.4、同步github账户fork的代码
github中曾经fork的代码不会自动与原作者保持同步。需要手动操作。假设你的github中fork的仓库地址为:
git@github.com:yourname/yourfork.git
原始作者的仓库地址为:
git@github.com:authorname/projectname.git
关联原始作者的仓库
git remote add authorname git@github.com:authorname/projectname.git
抓取原始作者仓库修改的文件
git fetch authorname
切换到本地主分支
git checkout master
合并远程的原始作者主分支
git merge authorname/master
推送到自己的远程仓库
git push origin master
9、分支操作
平时开发的时候,新开一个项目,但又不想把还没完成的代码提交到主分支上。这时我们可以创建一个新的分支,来提交我们的代码,这样不用担心代码因未提交可能丢失,也不会影响主分支的功能。等所有功能完成后,还可将新建的分支代码合并到主分支上,并删除新建的分支。新建分支 dev
git branch dev
切换分支(切换到dev分支)
git checkout dev
1、2 两步可用
git checkout -b dev直接达到。
查看当前分支
git branch
从远程仓库克隆时,默认在本地只能看到主分支,使用
git checkout -b dev origin/dev创建即可。
合并分支(将dev分支合并到当前分支)
git merge dev
删除分支
git branch -d dev
如果新建分支后,主分支一直没有提交新的操作,那么合并的时候,基本没有什么顾虑。但是新建分支后,主分支上也在继续开发,那么合并分支的时候,如果两个分支都对同一个文件的相同位置做了不同的修改,就会提示产生冲突,产生冲突后,可以用
git status查看冲突文件,git会在文件中以
<<<<<<<与
=======与
>>>>>>>来标注不同分支修改的内容,我们必须手动去掉这些标注来解决冲突后再提交就可以了。冲突解决后才能删除新建的分支。
查看分支合并图
git log --graph
git log --graph --pretty=oneline --abbrev-commit
如果当前代码已经写了一点,但不想提交到分支上,临时想切换到另一个分支分析点东西,可以使用
git stash储存工作现场。
保存工作现场
git stash
查看保存的工作现场
git stash list
恢复工作现场(会自动删除保存的工作现场记录)
git stash pop
恢复指定的工作现场(不会自动删除保存的工作现场记录)
git stash apply stash@{0}
删除保存的工作现场记录
git stash drop
10、标签操作
标签相当于仓库的一个快照。不过标签是针对当前分支的快照。创建标签
git tag v1.0(v1.0为标签名)
标签默认是打在最新的提交的那个时间点的,如果在以前的某次提交忘打的话,可以使用
git log --pretty=oneline --abbrev-commit查看那次的提交标识,使用
git tag v1.0 3628164(3628164为版本标识)。
可以使用-a 指定标签名,-m 指定标签说明文字。
如
git tag -a v0.1 -m "version 0.1 released" 3628164,这样的标签称为“附注标签“,与“轻量标签”对应。
查看所有标签
git tag
查看某个标签信息
git show v1.0
删除标签
git tag -d v0.1
切换到标签状态
git checkout v0.1
推送标签
通常
git push的时候是不会将标签也提交到git服务器上的,需要另外手动操作。
git push origin v0.1,
如果使用的github,可以去网站看看有没有推送成功。
使用
git push origin –tags可以将本地所有未提交的标签一次性提交到git服务器。
删除远程服务器标签
先删除本地标签:
git tag -d v0.1。
再提交到远程:
git push origin :refs/tags/v0.9,
:refs/tags/为固定格式,后面跟标签名。
11、界面操作软件
如果使用过TortoiseSVN,比较习惯界面操作的话,可以使用TortoiseGit,TortoiseGit是开源的客户端,只支持Windows。TortoiseGit 只是一个界面程序壳,运行必须依赖核心Git客户端,比如msysgit。
下载地址:https://download.tortoisegit.org/tgit/。
12、设置git代理
fatal: unable to access 'https://***.git': Failed to connect to chromium.googlesource.com port 443: Timed out
如果 url被墙的话,就需要设置 git代理了。
设置 git代理
git config --global http.proxy localhost:1080
git config --global https.proxy localhost:1080
localhost:1080为代理服务器 ip、端口。
如果需要用户名和密码:
git config –global http.proxy http://user:password@localhost:8080[/code]git config –global http.proxy https://user:password@localhost:8080[/code]
取消 git代理git config --global --unset http.proxygit config --global --unset https.proxy
相关文章推荐
- windows下GIT使用记录--01基本操作
- 记录git常用操作命令
- Git使用记录,项目中常用的操作步骤。无概念
- git常用操作记录
- Git 操作的常用操作命令记录
- git基础--Windows下的常用操作
- 记录常用的Git操作命令
- Windows(gitlab为例)系统下git常用操作
- git 常用操作记录
- 工作中常用的git操作记录
- 记录git常用操作命令
- Windows(gitlab为例)系统下git常用操作
- 一、git基本常用操作
- git常用操作
- 工作中常用的Repo和Git的一些操作[随时更新]
- Git 的常用操作
- Git相关操作及记录
- Git常用操作命令
- Windows 文件、目录操作编程 常用API
- python中常用的模块,git常用的一些操作