- 投稿日:2020-09-11T23:51:24+09:00
【対処法】Can’t automatically merge.�とThis branch has conflicts that must be resolvedが出た時の対処法
Github上でプルリクエストを送信する際、
Can’t automatically merge.
This branch has conflicts that must be resolved
というコンフリクトが発生する場合があります。
初めて目にした時は慌ててしまうかも知れませんが、解決方法は難しくありませんので落ち着いて対処していきましょう。対処法
このようなコンフリクトが発生した場合、Github上だけで対処することが可能です。
上記画像2枚目の、
This branch has conflicts that must be resolved
というメッセージの横にある、
Resolve conflicts
というボタンをクリックします。
すると、コンフリクトが発生しているファイルが一覧で表示されるので、一つ一つ修正をしていく流れになります。
(ここは画像のキャプチャを忘れてしまいました…すいません)今回のケースでは、マージしたいブランチ名をbranchA、マージされる側のブランチをmasterだとして、以下のように修正ポイントが表示されます。
<<<<<<< branchA
aaaaa
=======
bbbbb
>>>>>>> masterこの場合は、
・不要なコードを削除する
・どちらも必要なコードであれば、<<<<<<< branchA
=======
>>>>>>> master↑上記の記述のみを削除する
などを行う事でコンフリクトが解消され、右上にある「Mark as resolved」というボタンが開放されて、マージできるようになります。
ここまでの流れでコンフリクトは解決できます。
慌てて変なコマンドを大量に実行したりしてしまうとどんどん泥沼にハマっていく可能性があるので、落ち着いて対処するのが吉ですね。
今回の問題は以下の方の記事を参考に解決させていただきました。
分かりやすく記載されているので、併せてご確認ください。[Git] コンフリクトの治し方
https://qiita.com/hkengo/items/f47b9f50ac2dca407d12
- 投稿日:2020-09-11T22:15:38+09:00
SourceTree を利用したローカル/リモートリポジトリの管理
概要
SourceTree を利用して、git で作業ディレクトリ(ローカルディレクトリ/リモートディレクトリ)を管理する方法についてまとめる。
前提知識
環境
Sourcetree for Mac 2.7.6
(version 3 以降はアカウントを複数作成する必要があるようなので 2 系の最新版を利用)ローカルディレクトリの管理
git init //フォルダをバージョン管理の対象にする
1.[新規] → [ローカルリポジトリを作成] をクリック
2. [ローカルリポジトリを作成] ウィンドウでバージョン管理の対象にしたいフォルダを選択し、[作成] をクリックこのフォルダに text.md ファイルを格納しておく
git add //記録対象の指定
フォルダーの中にファイルを格納すると、自動的に Sourtree でも検知され、[作業ツリーのファイル] に表示される
ファイル名の先頭にあるチェックをオンにすると、ファイルが [indexにステージしたファイル] に追加される
git commit // 変更点の記録
画面下部にコミットメッセージを入力するところが出てくるので、コミットメッセージ(ここでは「first commit」)を記載し、[コミット] をクリック
ファイルの中身を修正すると、以下のように表示されるので、コミットしたいファイルを[作業ツリーのファイル] から選択し、コミットメッセージを入力する、という手順を繰り返す
リモートリポジトリへ変更を反映
github でリポジトリを作成
[Your profile] → [Repositories] → [New] をクリック
[Create a new repository] ページが表示されるので、[Repository name] を入力する。ここでは、ローカルディレクトリとあわせて「helloSourcetree」とし、[Create Repository] をクリックする
ここでは、画面に表示された [HTTPS] をコピーする
Sourcetree でローカルディレクトリを github のリモートディレクトリに紐づける
画面左上の [設定] をクリックし、[リモート] → [追加]をクリックし、github でコピーした URL(ここでは https のリンク) を貼り付けて設定する。リポジトリごとにこの設定が必要になるので、[リモートの名前] にはわかりやすいようにディレクトリと同様の名前を入力しておく。
commit した変更を github に反映
[プッシュ] をクリックすると、接続先を指定するウィンドウがでてくる
[プッシュ先のリポジトリ] で上記で作成した 「helloSourcetree」を選択し、[プッシュするブランチ]でプッシュしたいブランチをオンにして、[OK] をクリック
ID と PW を入力すると、githubに公開される
SSH を利用すると、プッシュする際に毎回 ID と PW をいれなくてOKなので便利github でファイルの中身を変更した場合
github 上で Read me ファイルの作成やファイルの中身を変更した場合や他の人が編集した場合も Sourcetree 上に反映される。 pull コマンドを利用して、ローカルリポジトリを更新する。
[プル] のところに❶と表示されていて、一件更新があることが確認できる。 [プル] をクリックデフォルトのまま OK をクリックすると反映される
注意点
[プル] できるとき(ローカルが最新状態でないとき)に、プルせずにプッシュしようとすると以下のエラーが発生する。
このエラーが発生した場合はプルしてからプッシュすること。
github にすでにあるリポジトリをローカルで管理
github にすでにあるリポジトリ(リモートリポジトリ)をローカルで管理するためにはクローンする必要がある
[新規] → [URLからクローン] をクリックここでは、GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~を参照し、SSH の設定を行っている
[ソース URL] には github の [Code] → [Clone with SSH] をコピーして貼り付ける
HTTPS を利用したい場合は、[Use HTTPS] をクリックSourcetree では利用しないコマンド
git status //ステータスの表示 にあたる画面
commit していないファイルの一覧を確認することができる。
git log // ログの表示 にあたる画面
いつだれが更新したかを確認することができる。
参考
- 投稿日:2020-09-11T21:43:32+09:00
Windows TerminalでGitの現在のブランチ名を表示する(PowerShell編)
問題
- 開発用のターミナルとして
Windows Terminal(PowerShell)
使っているけどブランチ名が表示されない。- 現在のブランチをいちいち確認する手間を省きたい
解決策
dahlbyk/posh-git: A PowerShell environment for Gitを使う
環境確認
Windows Terminal
を開いたら次のコマンドを実行して、現在のPowerShell
のバージョンを確かめる。$ $PSVersionTable.PSVersionこのコマンドを実行すると、下記のように
Powershell
のバージョンが確認できる。
README.md
を読んでみると5.x
系のバージョンであれば、このまま進めていって良さそうなので次に進む。posh-gitのインストール
管理者として実行
でWindows Terminal
を開きなおし、次のコマンドを実行する。$ PowerShellGet\Install-Module posh-git -Scope CurrentUser -AllowPrerelease -Forceこのように(↓)
AllowPrerelease
が認識されなかったら、PowerShellGet
のバージョンが要件以下という事。
次のコマンドを実行して
NuGet
をインストールし、PowerShellGet
における更新の準備を行う。$ Install-Module PowerShellGet -Scope CurrentUser -Force -AllowClobber
NuGet
をインストールできたら、PowerShellGet
がインストールされているかどうかを次のコマンドで確かめる。$ Install-Module -Name PowerShellGet -Forceなら
PowerShellGet
の更新を。$ Update-Module -Name PowerShellGet今までの設定を反映してもらうために一回閉じる。
準備ができたところで改めてposh-git
をインストール。$ PowerShellGet\Install-Module posh-git -Scope CurrentUser -AllowPrerelease -Forceposh-gitを使う
インストールしても、それを
PowerShell
に認識してもらったり使えるようにしてもらったりしなければ、ただそこにあるだけ。
ということで、インストールしたposh-git
を使えるようにするための設定をしていく。まずは次のコマンドを実行し、
posh-git
をPowerShell
に認識してもらう。$ Import-Module posh-git「これで完了かな?」と思い管理者以外のユーザーで開いてみると、
posh-git
が使えていなかった。
ということで、
Windows Terminal
を開けば自動でposh-git
が読み込まれたり管理者以外のユーザーでも使えるようにしたりするために次のコマンドを入力していく。$ Add-PoshGitToProfile $ Add-PoshGitToProfile -AllHosts $ Add-PoshGitToProfile -AllUsers -AllHosts
Add-PoshGitToProfile
:Windows Terminal
を開けば自動でposh-git
が読み込まれるようにする。Add-PoshGitToProfile -AllHosts
: 他のPowerShell
ホストでもposh-git
が使えるようにする。Add-PoshGitToProfile -AllUsers -AllHosts
: 全てのユーザーがposh-git
を使えるようにする。
Add-PoshGitToProfile -AllUsers -AllHosts
の適用には-Forceパラメーターが必要
という警告が出ることもある。
その場合は次のコマンドを実行する。$ Add-PoshGitToProfile -AllUsers -AllHosts -Force管理者以外のユーザーで
Windows Terminal
を開き、posh-git
が読み込まれているかを確かめる。posh-gitのカスタマイズ
posh-git
ではブランチ名だけでなく、表示カスタマイズなどもできる。次のコマンドで設定一覧を確認できる。
$ $GitPromptSettings変更したい設定は
$GitPromptSettings.項目名
で変更する。
自分が実行したのは次のコマンド達。$ $GitPromptSettings.DefaultPromptAbbreviateHomeDirectory = $false $ $GitPromptSettings.DefaultPromptPath.ForegroundColor = 'Orange' $ $GitPromptSettings.DefaultPromptBeforeSuffix.Text = '`n' $ $GitPromptSettings.DefaultPromptBeforeSuffix.Text = '`n$([DateTime]::now.ToString("MM-dd HH:mm:ss"))' $ $GitPromptSettings.DefaultPromptBeforeSuffix.ForegroundColor = [ConsoleColor]::Magenta
$GitPromptSettings.
を省略して解説。
~.DefaultPromptAbbreviateHomeDirectory = $false
: 現在のディレクトリ以外のパスを~
で省略しない~.DefaultPromptPath.ForegroundColor = 'Orange'
: 現在のパスをオレンジ色に。~.DefaultPromptBeforeSuffix.Text = '‘n'
: パス名とコマンド入力欄の間に改行を入れる。(`の代わりに‘を使用しています。)~.DefaultPromptBeforeSuffix.Text = '‘n$([DateTime]::now.ToString("MM-dd HH:mm:ss"))'
: コマンド入力欄の前に現在の時刻を表示する。(`の代わりに‘を使用しています。)~.DefaultPromptBeforeSuffix.ForegroundColor = [ConsoleColor]::Magenta
: 現在の時刻をマゼンタ色で表示する。この他にも設定できる箇所はあり、それらは
posh-git
のREADME.mdで解説されている。自分に合った
posh-git
を設定して使いこなそう!!参考資料
- 投稿日:2020-09-11T20:47:42+09:00
git操作で頻繁に使用するコマンド【初学者向け】
筆者はRailsからプログラミングを開始して1ヶ月半ほどの初学者です。
現時点で、git操作で使用する頻度の高いコマンドをまとめます。コミット関連
git add ファイル名orディレクトリ名
→指定したファイルorディレクトリの変更内容をステージに追加
git add .
→ワークツリー内の変更した内容全てをステージに追加
git commit -m'メッセージを挿入'
→ローカルリポジトリに変更を追加
git push origin HEAD
→変更をGithubに追加stash関連
git stash
修正途中のファイル等を、一時的に退避させておく。
Aのファイルを修正してる途中で、Bのファイルを修正したいとなった時などに、一旦このコマンドでAを退避させておいて、Bにとりかかるといった感じ。
git stash list
これまでにstashしたファイル等を一覧で表示する。
git stash pop
退避させておいたファイル等を、ワークツリーに戻す。
git stash clear
退避しているファイル等を全部削除する。ブランチ関連
git branch
→ブランチの一覧を表示
git checkout ブランチ名
→指定したブランチに移動
git checkout -b ブランチ名
→指定した名前のブランチを作成して移動
git branch -m 変更前のブランチ名 変更後のブランチ名
ブランチ名を変更その他
git pull origin master
現在いるブランチに、リモートリポジトリ(Github上)のmasterブランチの内容をマージ(丸ごとコピー)する。
このあたりがあまりピンとこない場合は、Udemyで「もう怖くないGit」などを見て勉強すると良いかも。あとは以下の記事も勉強になる。
"git pull origin master" の正体
https://qiita.com/nasutaro211/items/c590994a5d5091206c08
git log --oneline --decorate
これまでのコミット履歴を、分かりやすく1行で表示してくれる。一人で開発する上では、上記のコマンドでおおよそ間に合っています。
Gitの勉強をする上では、以下の動画も参考になりました。はじめてのGitとGithub
https://www.udemy.com/course/intro_git/learn/lecture/6393556#overviewGitの理解と正しく運用できる技術は実務を行う上でmustだと思うので、疑問点が出てきたらその都度きちんと理解できるまで調べていかなければなと感じています。
- 投稿日:2020-09-11T14:01:52+09:00
Gitリモートリポジトリ作成
Gitのリモートリポジトリを作成して、sshでアクセスする。
Vagrantfile
Vagrantfile# -*- mode: ruby -*- # vi: set ft=ruby : # Jenkins and Git and Rust Vagrant.configure("2") do |config| config.vm.box = "bento/ubuntu-20.04" config.vm.network "private_network", ip: "192.168.33.10" config.vm.synced_folder "./data", "/vagrant_data" config.vm.provider "virtualbox" do |vb| # vb.gui = true vb.memory = "2048" end # I know Vagrantfile does not require sudo. # I've added sudo to the command so that it can be executed interactively. config.vm.provision "shell", inline: <<-SHELL sudo apt update # Create repository directory. sudo mkdir /var/lib/gitrepo cd /var/lib/gitrepo sudo git init --bare --shared project.git # Create group for git user. sudo groupadd git sudo gpasswd -a vagrant git sudo chown -R :git /var/lib/gitrepo # git clone ssh://localhost/var/lib/gitrepo/project.git project.git SHELL end環境は
vagrant up
するだけでできる。
リポジトリへのアクセス権がないとアクセスできないので、グループを作って対応した。実行結果
まずは
git clone
。$ git clone ssh://localhost/var/lib/gitrepo/project.git Cloning into 'project'... The authenticity of host 'localhost (::1)' can't be established. ECDSA key fingerprint is SHA256:PRKtsYe7kZnpTU8+G7+a9KEMhRSsiyGXK2dOXQnJBQY. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts. vagrant@localhost's password: warning: You appear to have cloned an empty repository.ローカルリポジトリを更新する。
vagrant@vagrant:~$ cd project.git vagrant@vagrant:~/project.git$ echo test > README.md vagrant@vagrant:~/project.git$ git add . vagrant@vagrant:~/project.git$ git commit -m 'initial commit' [master (root-commit) 4dc4176] initial commit Committer: vagrant <vagrant@vagrant.vm> Your name and email address were configured automatically based on your username and hostname. Please check that they are accurate. You can suppress this message by setting them explicitly. Run the following command and follow the instructions in your editor to edit your configuration file: git config --global --edit After doing this, you may fix the identity used for this commit with: git commit --amend --reset-author 1 file changed, 1 insertion(+) create mode 100644 README.md
git push
する。vagrant@vagrant:~/project.git$ git push origin master vagrant@localhost's password: Enumerating objects: 3, done. Counting objects: 100% (3/3), done. Writing objects: 100% (3/3), 211 bytes | 35.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) To ssh://localhost/var/lib/gitrepo/project.git * [new branch] master -> master vagrant@vagrant:~/project.git$うまくいった。Windowsホストからアクセスする場合は、22番ポートが2222番ポートにフォワードされていること、今回のユーザがvagrantであることを考慮して、以下のようにする。
> git clone ssh://vagrant@localhost:2222/var/lib/gitrepo/project.git project.git Cloning into 'project.git'... vagrant@localhost's password: remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0) Receiving objects: 100% (3/3), done.振り返り
- 次はJenkinsとの連携だ。
参考資料