Git使用中遇到的问题记录

SSH keys


An SSH key allows you to establish a secure connection between yourcomputer and GitLab.

Before generating an SSH key, check if your system already has one byrunning cat ~/.ssh/id_rsa.pub. If you see a long string starting withssh-rsa orssh-dsa, you can skip the ssh-keygen step.

To generate a new SSH key, just open your terminal and use code below. Thessh-keygen command prompts you for a location and filename to store the keypair and for a password. When prompted for the location and filename, youcan press enter to use the default.

It is a best practice to use a password for an SSH key, but it is notrequired and you can skip creating a password by pressing enter. Note thatthe password you choose here can't be altered or retrieved.

ssh-keygen -t rsa -C "XXX@XXX.com"     # XXX is your own account 

Use the code below to show your public key.

cat ~/.ssh/id_rsa.pub

Copy-paste the key to the 'My SSH Keys' section under the 'SSH' tab in youruser profile. Please copy the complete key starting withssh- and endingwith your username and host.

Use code below to copy your public key to the clipboard. Depending on yourOS you'll need to use a different command:

Windows:

clip < ~/.ssh/id_rsa.pub

Mac:

pbcopy < ~/.ssh/id_rsa.pub

GNU/Linux (requires xclip):

xclip -sel clip < ~/.ssh/id_rsa.pub


git 查看远程分支、本地分支、创建分支、把分支推到远程repository、删除本地分支


git clone 指定分支:git clone -b <branch> <remote_repo> 例如: git clone -b 指定的分支名字

1 查看远程分支

  1. $ git branch -a  
  2. * br-2.1.2.2  
  3.   master  
  4.   remotes/origin/HEAD -> origin/master  
  5.   remotes/origin/br-2.1.2.1  
  6.   remotes/origin/br-2.1.2.2  
  7.   remotes/origin/br-2.1.3  
  8.   remotes/origin/master  

2 查看本地分支

  1. shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)  
  2. $ git branch  
  3. * br-2.1.2.2  
  4.   master  

3 创建分支

  1. shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)  
  2. $ git branch test  
  3.   
  4. shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)  
  5. $ git branch  
  6. * br-2.1.2.2  
  7.   master  
  8.   test  


线面是把分支推到远程分支 

  1. $ git push origin test  

4 切换分支到test
  1. shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)  
  2. $ git branch  
  3. * br-2.1.2.2  
  4.   master  
  5.   test  
  6.   
  7. shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)  
  8. $ git checkout test  
  9. M       jingwei-server/src/main/java/com/taobao/jingwei/server/service/cmd/GetCustomerTarCmd.java  
  10. M       jingwei-server/src/main/java/com/taobao/jingwei/server/util/ServerUtil.java  
  11. Switched to branch 'test'  
  12.   
  13. shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (test)  
  14. $ git branch  
  15.   br-2.1.2.2  
  16.   master  
  17. * test  

M 表示cong 原来分支(上一次修改没有提交br-2.1.2.2)带过来的修改

5 删除本地分支   Git branch -d xxxxx

shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (test)

  1. $ git checkout br-2.1.2.2  
  2. M       jingwei-server/src/main/java/com/taobao/jingwei/server/service/cmd/GetCustomerTarCmd.java  
  3. M       jingwei-server/src/main/java/com/taobao/jingwei/server/util/ServerUtil.java  
  4. Switched to branch 'br-2.1.2.2'  
  5.   
  6. shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)  
  7. $ git br  
  8. * br-2.1.2.2  
  9.   master  
  10.   test  
  11.   
  12. shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)  
  13. $ git br -d test  
  14. Deleted branch test (was 17d28d9).  
  15.   
  16. shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)  
  17. $ git br  
  18. * br-2.1.2.2  
  19.   master  

6 查看本地和远程分支  -a。前面带*号的代表你当前工作目录所处的分支

  1. remotes/origin/HEAD -> origin/master #啥意思呢?  

        ”在clone完成之后,Git 会自动为你将此远程仓库命名为origin(origin只相当于一个别名,运行git remote –v或者查看.git/config可以看到origin的含义),并下载其中所有的数据,建立一个指向它的master 分支的指针,我们用(远程仓库名)/(分支名) 这样的形式表示远程分支,所以origin/master指向的是一个remote branch(从那个branch我们clone数据到本地)“

       这个是执行 git remote -v 的结果,看出来origin其实就是远程的git地址的一个别名。

  1. $ git remote  -v  
  2. origin  git@xxxx/jingwei.git (fetch)  
  3. origin  git@xxxx/jingwei.git (push)  


  1. shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (test)  
  2. $ git branch -a  
  3.   br-2.1.2.2  
  4.   master  
  5. * test  
  6.   remotes/origin/HEAD -> origin/master  
  7.   remotes/origin/br-2.1.2.1  
  8.   remotes/origin/br-2.1.2.2  
  9.   remotes/origin/br-2.1.3  
  10.   remotes/origin/master  

7 删除远程版本

  1. git push origin :br-1.0.0  

  1. 删除远程分支  
  2. git branch -r -d origin/branch-name  

  1. git push origin :branch-name 





一.查看git提交的历史信息

git log命令显示从最近到最远的提交日志


 

如果嫌输出信息太多,可以试试加上--pretty=oneline参数,代码如下:

 

Java代码   收藏代码
  1. $ git log --pretty=oneline  
  2. c7b8b201284777366e2cf21d7f104eac123211a8 update add spark  
  3. 038491dda6a7982ae02bbb1c85908c4eabf0f639 update hadoop  
  4. 557dd6f51ebaf4d7ab2b50e10411701b749d1c8d add hadoop  

 

 

二.版本回退(回退到过去)

  • 第一种:根据head^来确定回退版本

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

参考实例:回退到上一个版本

 

Java代码   收藏代码
  1. $ git reset --hard HEAD^  
  2. HEAD is now at 038491d update hadoop  

 

 

  • 第二种:根据版本ID来确定回退版本
Java代码   收藏代码
  1. #查看提交的历史版本信息    
  2. $ git log --pretty=oneline    
  3. c7b8b201284777366e2cf21d7f104eac123211a8 update add spark    
  4. 038491dda6a7982ae02bbb1c85908c4eabf0f639 update hadoop    
  5. 557dd6f51ebaf4d7ab2b50e10411701b749d1c8d add hadoop    
  6.   
  7. #回退到038491dda6a7982ae02bbb1c85908c4eabf0f639 update hadoop这个版本</span>    
  8. $ git reset --hard 038491dda6a7982ae02bbb1c85908c4eabf0f639    
  9. HEAD is now at 038491d update hadoop    
  10.     
  11. #再次查看历史记录,发现前面的版本没有了!    
  12. $ git log --pretty=oneline    
  13. 038491dda6a7982ae02bbb1c85908c4eabf0f639 update hadoop    
  14. 557dd6f51ebaf4d7ab2b50e10411701b749d1c8d add hadoop   

 

 

三.版本回退(回退到未来)

从上个例子中,可以看出来,当使用git reset 回退到过去版本时,那么git log 会看不到当前版本的后面提交信息,怎么办!

答:使用git reflog 可以查看执行命令的历史信息

参考实例:回退到未来

Java代码   收藏代码
  1. #查看执行的历史命令,前面的那个编号,就是可以选择的版本号  
  2. $ git reflog  
  3. 038491d HEAD@{0}: reset: moving to 038491dda6a7982ae02bbb1c85908c4eabf0f639  
  4. c7b8b20 HEAD@{1}: reset: moving to c7b8b20  
  5. 557dd6f HEAD@{2}: reset: moving to 557dd6f51ebaf4d7ab2b50e10411701b749d1c8d  
  6. 038491d HEAD@{3}: reset: moving to HEAD^  
  7. c7b8b20 HEAD@{4}: commit: update add spark  
  8. 038491d HEAD@{5}: commit: update hadoop  
  9. 557dd6f HEAD@{6}: commit (initial): add hadoop  
  10.   
  11. #回退到未来  
  12. $ git reset --hard c7b8b20  
  13. HEAD is now at c7b8b20 update add spark  
  14.   
  15. #再次查看提交的历史信息果然又有了3个  
  16. $ git log --pretty=oneline  
  17. c7b8b201284777366e2cf21d7f104eac123211a8 update add spark  
  18. 038491dda6a7982ae02bbb1c85908c4eabf0f639 update hadoop  
  19. 557dd6f51ebaf4d7ab2b50e10411701b749d1c8d add hadoop  

 

Git:代码冲突常见解决方法


如果系统中有一些配置文件在服务器上做了配置修改,然后后续开发又新添加一些配置项的时候,

在发布这个配置文件的时候,会发生代码冲突:

error: Your local changes to the following files would be overwritten by merge:
        protected/config/main.php
Please, commit your changes or stash them before you can merge.

如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:

git stash
git pull
git stash pop

然后可以使用Git diff -w +文件名 来确认代码自动合并的情况.


反过来,如果希望用代码库中的文件完全覆盖本地工作版本. 方法如下:

git reset --hard
git pull

其中git reset是针对版本,如果想针对文件回退本地修改,使用

[plain]  view plain  copy
  1. git checkout HEAD file/to/restore  


git diff  找到不同的文件
git checkout 放弃文件的修改
再pull就没有问题了



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值