Git使用教程

Posted ChinaWJB

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git使用教程相关的知识,希望对你有一定的参考价值。

 
1.在github上新建一个项目仓库
 
2安装客户端msysigit
     下载路径(官网):http://git-for-windows.github.io/
    安装方法(百度经验):http://jingyan.baidu.com/article/e52e36154233ef40c70c5153.html     
github 是服务端,要想在自己电脑上使用 git 还需要一个 git 客户端,这里选用 msysgit,这个只是提供了 git 的核心功能,而且是基于命令行的。如果想要图形界面的话只要在 msysgit 的基础上安装 TortoiseGit 即可
3.创建本地版本库文件夹
     装完 msysgit 后右键鼠标会多出一些选项来,然后我们在本地新建个文件夹(比如叫 github),右键选择 Git Init Here,这样 github 文件夹内会多出来一个 .git 文件夹,(如果没有“Git Init Here”可以Git Bash,进入命令行后运行“git init”,同样可以生成.git文件)这就表示本地 git 创建成功。右键 Git Bash 进入 git 命令行就可以把刚刚新建的仓库克隆到本地,当然我们还需要配置下 ssh key。
 
4.配置git
首先,创建ssh key
ssh-keygen -t rsa -C "[email protected]"
 
后面的 [email protected] 改为自己的邮箱,之后会要求确认路径和输入密码,这里使用默认的一路回车就行。成功的话会在 "C:\Users\Administrator\.ssh"(我自己的)下生成 .ssh 文件夹,打开 id_rsa.pub,复制里面的 key,回到 github,进入 settings,左边选择 SSH keys,Add SSH Key,title 随便填,粘贴 key。为了验证是否成功,在 git bash 下输入:
 
 
如果是第一次的会提示是否 continue,输入 yes 就会看到:You‘ve successfully authenticated, but GitHub does not provide shell access,这就表示已成功连上 github。
 
然后要设置 username 和 email,因为 github 每次 commit 都会记录他们。
1 git config --global user.name "ChinaWJB"
2 git config --global user.email [email protected]
5、上传和克隆
然后可以两种操作
          (1)克隆到本地(比如克隆 css 的项目):
git clone [email protected]:zhuyujia/css.git
 
需要注意的是:github 提供了 3 种 url 路径(HTTPS,SSH,Subversion),一般如果账号处于登录状态,那么我们可以用 SSH,就像上面的代码,如果没有登录的话,只能用 HTTPS 的 url 了
 
          (2)上传文件
                    选择要添加进仓库的文件:            
 git add .
【 一般如果你想分享这个文件夹里的所有代码,就在 add后面加“.”,上面的例子就是这样,如果传指定的,只需要把“.”改为文件名即可】
                  
                    上面只是选择了要加入仓库的文件,下面添加进仓库
 git commit -m ‘Test‘后面的说明必须加,否则会出现高亮代码,无法继续操作
-m后面跟一个参数,表示说明,将代码提交到GitHub后,将会在代码文件信息上显示这个说明】
               正式提交到github上
1 git remote add origin [email protected]:XXX/XXX.git
2 git push (-u) origin master
【如果远程库是空的,加“-u”, Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。如果上传若失败,则 git pull (-u) origin master 将其拉回来,重新再提交】
之后如果本地提交了,直接使用“git push origin master“就可以提交到对应的远程库了
 
说明:
     
  1. cd test  
  2. touch README  
  3. git commit -m ‘first commit‘  
  4. @github.com:lzjun/test.git  
  5.  大概意思就是在本地创建test目录,初始化,创建一个README文件,当然这个文件时空的,你可以往里面填内容。接下来就是add就是把README文件纳入到git的管理范围内,

     

     

    commit:相当于把你项目的代码,文件及所有的东西做一个快照,(好比我们拍照),这所有的文件定格在这个时刻,之后的每一次commit也只把那些发生了改变的文件做快照。此时还并没有把代码提交到GitHub上去

     

    remote:和GitHub建立远程连接,注意这里的"lzjun"就是我的账户名,这根据自己的名称做相应的改变。这一步只在你第一次提交文件的时候出现,并且要输入之前的pressphrases.

     

push:就很好理解了,把文件推送到GitHub站点去。
 
 
6、帮助
     git help               在命令窗口显示常用的命令
     git help git          在浏览器打开git的api帮助文档
 
本地仓库或本地工作区
7、在本地提交,提交到本地版本库,更新后的提交也是用这两条命令
     git add  filename.txt(git rm filename同理)
     git commit -m "描述"
     删除文件rm同add
 
8、git status                         查看当前文件是否被修改过
     git diff  filename.txt          查看当前文件哪些地方被修改过
     git log                               查看历史提交版本,版本号
     git log --pretty=oneline     会有条理的输出历史提交版本
     git reset --hard 【加上版本号的前几位就可以,会自动填充】该命令会返回到指定版本号的版本
     git reset --hard HEAD^     该命令是返回上一个版本
     git reset --hard HEAD        该命令只是显示HEAD指针当前的分支的位置
     git reflog                            记录每一条命令,会显示执行每一条命令时当前的版本号
     git checkout -- filename     在工作区修改后还没有add(或rm)到缓存区,可以丢弃工作区的修改
     git reset HEAD filename      修改后已经提交到了暂存区,可以通过该命令返回到add之前的状态,
                                               可以在用git checkout -- filename 丢弃工作区的修改
小结:
     场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
 
     场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
 
     场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库
 
9.工作区:有.git 的文件夹
   版本库:.git 文件夹
         暂存区:.git 中的stage区
         master分支
 
   技术分享
 
远程仓库:
小结:   
要关联一个远程库,使用命令git remote add origin [email protected]:path/repo-name.git
关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
 
 
分支:
本地新建分支+合并分支+删除分支

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>( "-b"参数表示创建并切换)

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>
 
1、查看分支:git branch
*master
 
技术分享
 
 
2、新建+切换分支:git checkout -b dev
     查看分支: git branch
          *dev
            master
技术分享
3、在新分支上commit代码到本地仓库:
技术分享
4、切换回master分支:git checkout master
                 +
5、合并分支:git merge dev
技术分享
6、删除分支dev:git branch -d dev
 
技术分享
 
 
分支冲突
     在两个分支分别更改了代码,在master和dev都add和commit之后,合并时出现冲突,此时查看文件会出现:   
                         <<<<<<< HEADCreating a new branch is quick & simple.
                         =======Creating a new branch is quick AND simple.
             >>>>>>> feature1    
     注意:此时,两个分支处于等待修改后自动合并的状态,只需把文件手动修改后,再add和commit之后两个分支就重新合并到一起了。
 
     合并后通过命令:
git log --graph --pretty=oneline --abbrev-commit
或:git log --graph
 
     可以查看到如下输出:
*   3aeb259 delete confilict in master and dev
|\
| * d1f9b49 new a branch dev
* | b6d227b in master new
|/
* 94e8f6b change testliaoxuefeng
* f56ae93 add readme
* f32d4bf wrire a test file
* 736e83c wrire a testliaoxuefeng file
 
Bug分支
    
     修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
     当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
     恢复现场:两种方法
          一是:用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
          另一种是:用git stash pop,恢复的同时把stash内容也删了:
     可以用git stash list 来查看刚才的工作现场去哪了。
 
Feature分支
      添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
      但是在合并的时候,不需要这个新功能了,则,需要强制删除该分支git branch -D <name>,普通删除删除不了,因为没有合并。
     小结:
          开发一个新feature,最好新建一个分支;
          如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除
 
多人协作

多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin branch-name推送自己的修改;

  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

  3. 如果合并有冲突,则解决冲突,并在本地提交;

  4. 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!

如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name

这就是多人协作的工作模式,一旦熟悉了,就非常简单。

小结

  • 查看远程库信息,使用git remote -v

  • 本地新建的分支如果不推送到远程,对其他人就是不可见的;

  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name

  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

 
标签管理
     创建标签:
     
  • 命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
 
  • git tag -a <tagname> -m "blablabla..."可以指定标签信息;
 
  • git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
  • 命令git tag可以查看所有标签
 
     使用标签:
  • 命令git push origin <tagname>可以推送一个本地标签;

  • 命令git push origin --tags可以推送全部未推送过的本地标签;

  • 命令git tag -d <tagname>可以删除一个本地标签;

  • 命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

使用GitHub之fork
  • 在GitHub上,可以任意Fork开源仓库;

  • 自己拥有Fork后的仓库的读写权限;

  • 可以推送pull request给官方仓库来贡献代码。

 
 
 ————————参考廖雪峰老师官网
 
 
 
 
 

以上是关于Git使用教程的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

如何管理在每个 git 版本中添加私有代码片段?

markdown Git代码片段

GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段